我有一个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
。
答案 0 :(得分:2)
基本上,我只想要 高亮边框显示时 组件具有焦点,没有边框 当组件没有聚焦时。
您需要使用FocusListener。首先,您需要保存当前边框。然后在focusLost上将Border设置为null,并在focusGained上使用保存的Border。
或者您可以使用UIManager获取组件的默认边框。
答案 1 :(得分:1)
您可以使用CompoundBorder执行此操作。
在具有Nimbus外观的Windows下,我可以重现这个问题。 我可以使用以下代码显示两个边框:
Border lineBorder = BorderFactory.createLineBorder(Color.WHITE, 2);
Border originalBorder = nameField.getBorder();
CompoundBorder compoundBorder = new CompoundBorder(lineBorder, originalBorder);
nameField.setBorder(compoundBorder);