设置自定义边框时,如何保持JComponent的高亮边框

时间:2010-06-07 19:03:57

标签: 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.createLineBorder(Color.WHITE, 2));

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

如果我注释掉nameField.setBorder(...),则突出显示重新出现。如何保持高光,还有我的自定义边框!?

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

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

2 个答案:

答案 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);