2016-03-24 32 views
1

我有一個類實現了FocusListener,在類內部得到了很多JTextField,我希望所有人都在焦點增加時選擇所有內容。這是我的focusGained()功能:JTextField在焦點增加時選擇所有內容

@Override 
public void focusGained(FocusEvent fe) 
{ 
    JTextField txt = (JTextField)fe.getComponent(); 
    txt.selectAll(); 
} 

我嘗試fe轉換爲元件然後selectAll(),但它沒有工作。對此有何想法?

+0

txt.selectAll();應該被包裝到invokeLater中 - 移動到EDT的末尾,原因是因爲焦點是異步的,並且有顯着的延遲 – mKorbel

回答

2

您需要使用getSource()

((JTextField)fe.getSource()).selectAll(); 

我personnally檢查instanceoffe.getSource()

@Override 
public void focusGained(FocusEvent fe) { 
    if (!(fe.getSource() instanceof JTextField)) return; 
    JTextField txt = (JTextField)fe.getSource(); 
    txt.selectAll(); 
} 
0

您的代碼應該工作,所以我想聽衆不是在JTextField中註冊。你必須做某事。像這樣(通知addFocusListener方法):

public class MyClass implements FocusListener { 
    public JTextField createTextField() { 
    JTextField field = new JTextField(); 

    //add this class as a listener to the textfield 
    field.addFocusListener(this); 

    return field; 
    } 

    @Override 
    public void focusGained(FocusEvent fe) { 
    JTextField txt = (JTextField)fe.getComponent(); 
    txt.selectAll(); 
    } 

    @Override 
    public void focusLost(FocusEvent e) { 
    } 
}