2010-06-07 44 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);