Java 设置自定义边框时,如何保持JComponent的高亮边框
我有一个JTextField,其中设置了一些自定义属性:Java 设置自定义边框时,如何保持JComponent的高亮边框,java,focus,border,highlight,jcomponent,Java,Focus,Border,Highlight,Jcomponent,我有一个JTextField,其中设置了一些自定义属性: nameField.setPreferredSize(new Dimension(275,40)); nameField.setBackground(bgColor); nameField.setForeground(txtColor); nameField.setFont(new Font("HelveticaNeue",Font.PLAIN,22)); nameField.setBorder(BorderFactory.createL
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.setboorder(…),突出显示将重新出现。如何保持高光和自定义边框
基本上,我只想在组件有焦点时显示高亮边框,而在组件未聚焦时不显示边框
请注意,原始边框的类型为com.apple.laf.AquaTextFieldBorder
基本上,我只想要
高亮显示边框以显示
组件有焦点,没有边框
当组件未聚焦时
您需要使用FocusListener。首先,您需要保存当前边框。然后在focusLost上将边框设置为null,在FocusGoven上使用保存的边框
或者,您可以使用UIManager获取组件的默认边框。您可以使用CompoundBorder来实现这一点 在Windows下,使用Nimbus的外观和感觉,我可以重现问题。 我可以使用以下代码显示两个边框:
Border lineBorder = BorderFactory.createLineBorder(Color.WHITE, 2);
Border originalBorder = nameField.getBorder();
CompoundBorder compoundBorder = new CompoundBorder(lineBorder, originalBorder);
nameField.setBorder(compoundBorder);
你的两个答案在某种程度上都有效。但有一个问题。原始边框似乎是一个复合边框,突出显示为外层,白色1px线边框为内层。我不要内边框!注意:我在OSX上安装过,原始边框的类型实际上是com.apple.laf.AquaTextFieldBorder