2010-06-07 28 views
2

我有一个JTextField,在那里我已经设置了自定义属性:如何保持一个JComponent,重头戏边界时,自定义边框设置

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

基本上,我只是想 高亮边框显示,当 组件具有焦点,并且无边框 组件时散。

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

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

+0

这两个答案在某种程度上都起作用。但有一个问题。原始边框似乎是一个复合边框,突出显示为外边框,内部为1px的白色边框。我不想要内在的边界! 注意:我在OS X上,原始边框的类型实际上是com.apple.laf.AquaTextFieldBorder – 2010-06-07 20:08:07

1

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

在带有Nimbus外观的Windows下,我可以重现该问题。 我可以通过以下代码获得两个边框:

Border lineBorder = BorderFactory.createLineBorder(Color.WHITE, 2); 
    Border originalBorder = nameField.getBorder(); 
    CompoundBorder compoundBorder = new CompoundBorder(lineBorder, originalBorder); 
    nameField.setBorder(compoundBorder);