3

我有一个 JTextField,我在其中设置了一些自定义属性:

nameField.setPreferredSize(new Dimension(275,40));
nameField.setBackground(bgColor);
nameField.setForeground(txtColor);
nameField.setFont(new Font("HelveticaNeue",Font.PLAIN,22));
nameField.setBorder(BorderFactory.createLineBorder(Color.WHITE, 2));

当组件具有焦点时,字段周围不会显示突出显示。在 Mac 上,它通常是一个蓝色的发光矩形,表示该组件具有焦点。

如果我注释掉 nameField.setBorder(...),突出显示会再次出现。我如何保持突出显示,还有我的自定义边框!?

基本上,我只想在组件具有焦点时显示高亮边框,而在组件未获得焦点时不显示边框。

请注意,原始边框的类型为com.apple.laf.AquaTextFieldBorder.

4

2 回答 2

2

基本上,我只想在组件具有焦点时显示高亮边框,而在组件未获得焦点时不显示边框。

您需要使用 FocusListener。首先你需要保存当前的Border。然后在 focusLost 上将 Border 设置为 null,然后在 focusGained 上使用保存的 Border。

或者您可以使用 UIManager 获取组件的默认边框。

于 2010-06-07T19:27:34.870 回答
1

您可以使用 CompoundBorder 来做到这一点。

在具有 Nimbus 外观的 Windows 下,我可以重现该问题。我可以使用以下代码显示两个边框:

  Border lineBorder = BorderFactory.createLineBorder(Color.WHITE, 2);
  Border originalBorder = nameField.getBorder();
  CompoundBorder compoundBorder = new CompoundBorder(lineBorder, originalBorder);
  nameField.setBorder(compoundBorder);
于 2010-06-07T19:28:48.780 回答