我想在焦点丢失后立即从文本字段中获取文本。为此,我尝试使用"这个"运营商,但它不起作用

时间:2015-11-25 08:10:18

标签: java swing

我的框架中有很多文本字段,因此不可能为每个文本域中都有一个焦点监听器。所以我想使用一个焦点监听器功能,并在焦点丢失时获取文本。

        tf1=new JTextField();
        tf1.setBounds(200,300,150,50);
        tf1.setText("");
        tf1.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                tfFocusLost(evt);
            }
        });
        add(tf1);

        tf2=new JTextField();
        tf2.setBounds(200,500,150,50);
        tf2.setText("");
        tf2.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                tfFocusLost(evt);
            }
        });
        add(tf2);

    private void tfFocusLost(java.awt.event.FocusEvent evt) {
        s=this.getText();   
        System.out.println(s);
    }

2 个答案:

答案 0 :(得分:2)

为什么不创建自己的扩展FocusAdapter的类,而不是为每个JTextField创建一个匿名类:

public class MyFocusAdapter extends FocusAdapter {

    private final JTextField text;

    public MyFocusAdapter(JTextField text) {
        this.text = text;
    }

    public void focusLost(java.awt.event.FocusEvent evt) {
        System.out.println(text);
    }
}

然后你可以使用这个类:

tf1.addFocusListener(new MyFocusAdapter(tf1));
tf2.addFocusListener(new MyFocusAdapter(tf2));

答案 1 :(得分:0)

您需要更改tfFocusLost的实现。

   private void tfFocusLost(java.awt.event.FocusEvent evt) {
        s=this.getText();   
        System.out.println(s);
    }

而不是上面你可以使用这样的东西。

 private void tfFocusLost(java.awt.event.FocusEvent evt, JTextField textField ) {
        s=textField.getText();   
        System.out.println(s);
    }

并将其称为tfFocusLost(evt,tf1);