Mac L&F 问题:JTextField.requestFocus() 的不同行为

ama*_*ion 4 java macos look-and-feel jtextfield

我有 JTextField.requestFocus() 行为的问题,它在 Mac OS X 上似乎有所不同。

这是我的情况:我有一个带有 JList 和 JTextField 的对话框。用户应该在文本字段中写入一个布尔表达式,该列表包含可能在表达式中输入的所有变量的名称。因为希望用户在单击列表中的变量后继续输入表达式,所以程序调用 JTextField.requestFocus() 很有帮助。通过这种方式,您可以例如从列表中单击“pvalue”,然后键入“<0.05”,而无需单击中间的文本字段。

这一切在我的开发机器 (Linux) 上都运行良好,但我从 Mac 用户那里得到了一个错误报告,即单击列表实际上选择了文本字段中的所有文本,因此很容易意外覆盖之​​前输入的内容。

我怀疑这是 Mac 外观的问题,经过一番搜索后,似乎确实存在与此问题有关的 mac 外观的“Quaqua.TextComponent.autoSelect”属性:http://www.randelshofer.ch/quaqua/guide/jtextcomponent.html

我的一般问题是:

  • 你能建议一个解决这个问题的方法吗?

如果范围太广,对这些子问题的回答已经是一个很大的帮助:

  • 一个可能的解决方案是更改属性“Quaqua.TextComponent.autoSelect”。我怎么做?
  • 我什至不确定“Quaqua”是什么。它看起来像是定制的外观。Mac OS X 的默认外观是什么?它是否具有类似于 Quaqua.TextComponent.autoSelect 的属性?
  • 是否有可能仅为单个组件实例调整外观?如果是这样,如何?
  • 是否可以在我的 Linux 开发机器上设置 Mac 的外观,以便我可以实际确认这个错误(以上所有内容都是基于预感和怀疑)?如果是这样,如何?

Aar*_*ron 5

似乎这是 Mac OS 的错误。JTextFields 在通过键盘选项卡循环获得焦点时选择它们的内容。如果插入点在文本中间,则插入点将保留并且不会选择整个文本。

作为一种解决方法,您可以使用以下方法覆盖此行为,它对我来说很好用:

textfield.setCaret(new DefaultCaret()).

更多细节你可以参考这个这个