Как определить, находится ли дисплей в режиме высокой контрастности?
Я тестирую приложение Swing моей компании на предмет доступности. С включенным режимом высокой контрастности на моем компьютере некоторые части этого приложения отображаются правильно (белый на черном), а некоторые неправильно (черный на белом).
Правильными являются битовые компоненты (JButton, JLabel и еще много чего) и сторонние компоненты, подобные JIDE. Неправильные биты - это пользовательские компоненты и средства визуализации, разработанные собственными силами без учета режима высокой контрастности.
Очевидно, что можно определить, когда включен режим высокой контрастности. Как мне это сделать?
3 ответа
Оказывается, для этой цели в Java 1.4.1 было добавлено свойство win.highContrast.on.
public static void main(String[] args) {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Boolean highContrast = (Boolean)toolkit.getDesktopProperty( "win.highContrast.on" );
}
Это работает только на Windows (следовательно, win.
префикс). На Linux и Mac highContrast
будет нулевым Сначала будет безопаснее выполнить проверку платформы или проверку на нуль highContrast
,
Выдержка из этой ссылки: http://www.section508.gov/IRSCourse/mod02/printJava.html
"Программное обеспечение Windows может проверить настройку высокой контрастности, вызвав функцию SystemParametersInfo со значением SPI_GETHIGHCONTRAST. Приложения должны запрашивать и поддерживать это значение во время инициализации и при обработке сообщений WM_COLORCHANGE".
Это для доступа через Win32 API: http://msdn.microsoft.com/en-us/library/ms724947(VS.85).aspx (Не совсем уверен, как, хотя, не очень хорошо в этой области, надеюсь, кто-то можно завершить)