2013-12-11 71 views
0

我有一些Swing控件,不顯示它是否有焦點(實際上,這是PCanvas,但可能這並不重要)。如何在Swing控件中顯示焦點?

現在我想讓這個控件顯示它是否被聚焦。

我想到兩個選擇:

1)在Swing任何控制能夠顯示焦點,不過這個功能是默認關閉。那麼如何打開它?

2)控件默認不顯示焦點,那該怎麼做?我可以覆蓋paintBorder,但是我應該採取其他措施嗎?

+2

一)沒有沒有默認的行爲,這取決於具體的UI委託方B)不覆蓋的paintBorder - 而是使用focusListener並根據焦點狀態設置邊框 – kleopatra

回答

1

爲了這個目的,你可以使用FocusListener例如:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.event.FocusEvent; 
import java.awt.event.FocusListener; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class Example extends JFrame { 

    public Example() { 
     JButton button = new JButton("btn"); 
     add(button,BorderLayout.WEST); 
     JTextField field = new JTextField(5); 
     field.addFocusListener(new FocusListener() { 

      @Override 
      public void focusGained(FocusEvent arg0) { 
       ((JTextField)arg0.getComponent()).setBorder(BorderFactory.createLineBorder(Color.RED)); 
      } 

      @Override 
      public void focusLost(FocusEvent arg0) { 
       ((JTextField)arg0.getComponent()).setBorder(null); 
      } 
     }); 

     add(field,BorderLayout.EAST); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 


    public static void main(String[] args) { 
     new Example(); 
    } 
} 

enter image description here

相關問題