2015-04-26 123 views
1

學習編碼,建立一個GUI來確定每個事物如何相互作用。試圖編寫一個方法,以在我需要的大型程序中設置焦點(組件) - 即調用FocusGrabber(JTextField1)並讓它將輸入焦點設置爲JTextField1。爲了盡力做到最好的SSCCE,我做了一個簡單的主體,使得只有足夠的GUI給出了2個應該把焦點放在第二個文本域上的文本域。焦點沒有通過抓取焦點的方法來設置

package ODIN; 
import java.awt.Component; 
import java.util.List; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
/* 
*/ 
class FocusGrabber implements Runnable { 
    private JComponent component; 
    public FocusGrabber(JComponent component) { 
     this.component = component; 
    } 
    @Override 
    public void run() { 
     component.grabFocus(); 
    } 

    public static void main(String[] args){ 
     //draw and show the GUI 
     JFrame GUI = new JFrame(); 
     GUI.setTitle("New Provider Interface"); 
     GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     final JTextField textID = new JTextField("providerID ", 20); 
     final JTextField textName = new JTextField("Provider Name ", 20); 

     GUI.add(textID); 
     GUI.add(textName); 
     GUI.pack(); 
     GUI.setVisible(true); 
     FocusGrabber(textName); 
    } 
} 

回答

0

使用requestFocusInWindow超過grabFocus ...

這也將是有益的,如果你叫在某一點上run方法

而且,它不應該是更像

FocusGrabber fg = new FocusGrabber(textName); 
fg.run(); 
+0

是的,它應該 - 我試圖通過一個最低限度的主要SSCCE轉錄,我錯過了那部分。將焦點捕捉者定義爲主要變量而不是事件偵聽者內部的響應,然後根據需要運行它們,這些都非常完美。 –