javaswingaccessibilityhigh-contrast

How do I detect if a display is in High Contrast mode?


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?


Solution

  • 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.