如何检测显示器是否处于高对比度模式?

时间:2009-06-30 09:32:54

标签: java swing accessibility high-contrast

我正在测试我公司已建立的Swing应用程序的可访问性问题。在我的PC上启用高对比度模式时,此应用程序的某些部分会正确呈现(黑底白字),而另一些则不正确(白底黑字)。

正确的位是本机组件(JButton,JLabel和诸如此类)以及来自JIDE之类的第三方组件。不正确的位是自定义组件和内部开发的渲染器,不考虑高对比度模式。

显然,可以检测何时启用高对比度模式。我该怎么做?

3 个答案:

答案 0 :(得分:4)

原则上,为了这个目的,在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将为null。首先进行平台检查或highContrast上的空检查是最安全的。

答案 1 :(得分:2)

从此链接中摘录:http://www.section508.gov/IRSCourse/mod02/printJava.html

“Windows软件可以通过使用SPI_GETHIGHCONTRAST值调用SystemParametersInfo函数来检查高对比度设置。应用程序应在初始化期间和处理WM_COLORCHANGE消息时查询并支持此值。”

这是通过Win32 API进行访问:http://msdn.microsoft.com/en-us/library/ms724947(VS.85).aspx(不完全确定在该领域的表现如何,希望有人可以完成)

答案 2 :(得分:0)

你试过吗

Toolkit.getDefaultToolkit().getColorModel()