views:

448

answers:

3

I'm testing my company's established Swing application for accessibility issues. With high contrast mode enabled on my PC certain parts of this application are rendered properly (white-on-black) and some incorrectly (black-on-white).

The bits that are correct are the native components (JButton, JLabel and whatnot) and third party components from the likes of JIDE. The incorrect bits are custom components and renderers developed in-house without consideration for high-contrast mode.

Clearly it's possible to detect when high-contrast mode is enabled. How do I do this?

+1  A: 

Extract from this link : http://www.section508.gov/IRSCourse/mod02/printJava.html

"Windows software can check for the high contrast setting by calling the SystemParametersInfo function with the SPI_GETHIGHCONTRAST value. Applications should query and support this value during initialization and when processing WM_COLORCHANGE messages."

This is to access via the Win32 API : http://msdn.microsoft.com/en-us/library/ms724947(VS.85).aspx (Not fully sure how, though, not really good in that field, hope someone can complete)

Gnoupi
Googling for SPI_GETHIGHCONTRAST led me to find my answer, so thanks.
banjollity
A: 

Did you try

Toolkit.getDefaultToolkit().getColorModel()
Stroboskop
+2  A: 

Turns out the win.highContrast.on property was added in Java 1.4.1 for this purpose.

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

This only works on Windows (hence the win. prefix). On linux and Mac highContrast will be null. It'll be safest to do a platform check first, or a nullcheck on highContrast.

banjollity