Как определить, находится ли дисплей в режиме высокой контрастности? - PullRequest
2 голосов
/ 30 июня 2009

Я проверяю приложение Swing моей компании на наличие проблем с доступностью. С включенным режимом высокой контрастности на моем компьютере некоторые части этого приложения отображаются правильно (белый на черном), а некоторые неправильно (черный на белом).

Битами, которые являются правильными, являются собственные компоненты (JButton, JLabel и еще много чего) и сторонние компоненты, подобные JIDE. Неправильные биты - это пользовательские компоненты и средства визуализации, разработанные собственными силами без учета режима высокой контрастности.

Очевидно, что можно определить, когда включен режим высокой контрастности. Как мне это сделать?

Ответы [ 3 ]

4 голосов
/ 30 июня 2009

Оказывается, для этой цели в 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.

2 голосов
/ 30 июня 2009

Выдержка из этой ссылки: 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 (Не совсем уверен, как, хотя, не очень хорошо в этой области, надеюсь, кто-то может выполнить)

0 голосов
/ 30 июня 2009

Вы пробовали

Toolkit.getDefaultToolkit().getColorModel()
...