2016-03-24 8 views
1

私はクラスにFocusListenerを実装しています。クラス内にJTextFieldがたくさんあります。私はコンポーネント、その後selectAll()feを変換しようJTextFieldフォーカスが得られたときにすべてのコンテンツを選択します

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

が、それは作品をしていない:これは私のfocusGained()機能です。これについてのアイデアは?

+0

txt.selectAll(); invokeLaterにラップする必要があります - EDTの終わりに移動し、理由はフォーカスが非同期であり、かなりの遅延があるためです – mKorbel

答えて

2

あなたは、私がpersonnallyあなたのコードは動作するはずですinstanceoffe.getSource()

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

を確認したいので、私はリスナーがJTextFieldのでは登録されていないと仮定しgetSource()

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

を使用する必要があります。あなたはsthをしなければならない。次のようにします(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) { 
    } 
} 
関連する問題