【问题标题】:Swing GUI doesn't accept accent charactersSwing GUI 不接受重音字符
【发布时间】:2013-11-28 07:28:46
【问题描述】:

我遇到了一个奇怪的问题。我的 Java 应用程序不接受重音字符,例如 é、è 或 ê。 Swing 组件JTextField 将其转换为e。此外,我无法插入:´

这很奇怪,因为它不适用于旨在分发给用户的已编译和打包的应用程序(JAR 文件)。当我在 Eclipse 中执行我的应用程序时,一切正常:这些字符被接受。

我在启动时检查了使用的 VM 编码。他们是不同的。打包的应用程序使用 Cp1252,Eclipse 以“ISO-...”开头。系统属性“file.encoding”相应地显示了相关的编码。因此,我尝试切换编码以便在 Eclipse 中重现该问题或在我的应用程序中修复它。但结果和以前一样。

你知道发生了什么吗?

【问题讨论】:

  • 1) " Cheers PAX" 这相当于 4 行噪音。以后别管了。 2) 不要忘记添加 Java 标签。 3)如果你添加了一个标签,它变成了“主要标签”,那么就没有必要在问题标题中添加这个词了。
  • 好的,谢谢,我会记住的!更新:如果我按变音字符后跟“e”,则 keytyped 事件会收到不带变音字符的“e”。
  • 我正要建议你发布一个 SSCCE,但后来我意识到只需要几行代码就可以重现问题......而且我不知道如何在 任何应用程序。无论哪种方式。我正在使用基于英语的语言环境运行 Windows。你能告诉我如何在记事本(或其他默认的 Windows 软件)中生成这些字符吗?
  • 不需要删除。如果您想插入死键´,那么您可以将 Windows 键盘设置切换为德语布局(例如)。键位于美式键盘布局的“+”键上。

标签: java swing encoding diacritics


【解决方案1】:

好的,问题不是由 Java 或任何编码设置引起的。我的应用程序挂钩了所有关键事件。有一个组件消耗了“死键”的键事件。这就是编辑器组件(或 JTextField)没有从事件调度器接收到按键事件的原因。

【讨论】:

  • 在 linux 上没有出现这个问题。事件的处理顺序可能与 Windows 上的不同。
  • 很高兴您得到了排序,感谢您报告解决方案。 :)
  • 哪个组件消耗了“死键”的键事件?
  • @guteFee 不幸的是,这太早了。我无法提醒任何细节。
【解决方案2】:

OpenJDK 错误跟踪器中提到了一个关于 Swing 问题的错误:https://bugs.openjdk.java.net/browse/JDK-8064448

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多