【问题标题】:How do I detect if a display is in High Contrast mode?如何检测显示器是否处于高对比度模式?
【发布时间】:2010-05-09 11:50:32
【问题描述】:

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

正确的是本地组件(JButton、JLabel 等)和来自 JIDE 之类的第三方组件。不正确的位是内部开发的自定义组件和渲染器,没有考虑高对比度模式。

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

【问题讨论】:

    标签: java swing accessibility high-contrast


    【解决方案1】:

    原来在 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 进行空检查是最安全的。

    【讨论】:

    • 这个属性肯定是以“win”开头的事实。意味着您不必进行平台检查..?另一个平台设置此属性的可能性有多大?
    • 需要检查,因为在其他平台上 highContrast 将为空,因为该标志不存在。 Windows 将具有 Boolean.TRUE 或 Boolean.FALSE。
    【解决方案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(虽然不完全确定如何,但在该领域不是很好,希望有人可以完成)

    【讨论】:

    • 谷歌搜索 SPI_GETHIGHCONTRAST 让我找到了答案,非常感谢。
    【解决方案3】:

    你试过了吗

    Toolkit.getDefaultToolkit().getColorModel()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2010-10-24
      • 2011-08-13
      • 2014-10-02
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      相关资源
      最近更新 更多