Pytanie w sprawie swing, accessibility, java, high-contrast – Jak wykryć, czy wyświetlacz jest w trybie wysokiego kontrastu?

2

Testuję aplikację Swing utworzoną przez moją firmę pod kątem problemów z dostępnością. Przy włączonym trybie wysokiego kontrastu na moim komputerze niektóre części tej aplikacji są prawidłowo renderowane (biało na czarnym), a niektóre niepoprawnie (czarno-białe).

Prawidłowe bity to komponenty natywne (JButton, JLabel i whatnot) oraz komponenty stron trzecich od takich jak JIDE. Błędne bity to niestandardowe komponenty i renderery opracowane we własnym zakresie bez uwzględnienia trybu wysokiego kontrastu.

Oczywiście możliwe jest wykrycie, kiedy włączony jest tryb wysokiego kontrastu. Jak mam to zrobic?

Twoja odpowiedź

3   odpowiedź
2

Wyciąg z tego linku:http://www.section508.gov/IRSCourse/mod02/printJava.html

„Oprogramowanie Windows może sprawdzić ustawienie wysokiego kontrastu, wywołując funkcję SystemParametersInfo z wartością SPI_GETHIGHCONTRAST. Aplikacje powinny wysyłać zapytania i obsługiwać tę wartość podczas inicjowania i przetwarzania komunikatów WM_COLORCHANGE.”

Ma to na celu uzyskanie dostępu za pośrednictwem Win32 API:http://msdn.microsoft.com/en-us/library/ms724947(VS.85).aspx (Nie do końca pewny, jak niezbyt dobry w tej dziedzinie, mam nadzieję, że ktoś może ją ukończyć)

Googling dla SPI_GETHIGHCONTRAST skłonił mnie do znalezienia mojej odpowiedzi, więc dziękuję. banjollity
4

że właściwość win.highContrast.on została dodana do Java 1.4.1 w tym celu.

public static void main(String[] args) {
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Boolean highContrast = (Boolean)toolkit.getDesktopProperty( "win.highContrast.on" );
}

Działa to tylko w systemie Windows (stądwin. prefiks). Na Linuksie i MacuhighContrast będzie null. Najbezpieczniej będzie najpierw sprawdzić platformę, czy sprawdzić nullhighContrast.

Wymagane jest sprawdzenie, ponieważ highContrast będzie zerowy na innych platformach, ponieważ flaga nie jest obecna. Windows będzie miał Boolean.TRUE lub Boolean.FALSE. Keilly
Z pewnością fakt, że ta właściwość zaczyna się od „wygraj”. oznacza, że ​​nie musisz sprawdzać platformy ..? Jakie są szanse, że inna platforma będzie miała tę właściwość ustawioną? Trejkaz
0

Próbowałeś

Toolkit.getDefaultToolkit().getColorModel()

Powiązane pytania