4

我的应用程序中有很多 jTextFields(大约 34 个 jTextFields),我希望他们所有人在获得焦点时都选择所有文本,并且在失去焦点时不选择任何文本。
有没有办法用一个听众来做这件事,或者我应该为这 34 个 jTextField 中的每一个写一个“FocusGained”和一个“FocusLost”?

谢谢

4

4 回答 4

13

为此任务创建一个类:

static class FocusTextField extends JTextField {
    {
        addFocusListener(new FocusListener() {

            @Override
            public void focusGained(FocusEvent e) {
                FocusTextField.this.select(0, getText().length());
            }

            @Override
            public void focusLost(FocusEvent e) {
                FocusTextField.this.select(0, 0);
            }
        });
    }
}

示例用法(下面的代码):

截屏

public static void main(String[] args) throws Exception {

    JFrame frame = new JFrame("Test");
    frame.setLayout(new GridLayout(5, 1));

    frame.add(new FocusTextField());
    frame.add(new FocusTextField());
    frame.add(new FocusTextField());
    frame.add(new FocusTextField());
    frame.add(new FocusTextField());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}
于 2011-09-09T12:05:26.140 回答
2

在类上创建并扩展 JTextField 现在在此类中实现您想要的任何内容。在哪里可以像这样创建 JTextField 对象

JTextField txt1 = new JTextField();
frm.add(txt1);

而不是这样做

JTextField txt1 = new CustomText();
frm.add(txt1);

所以你必须为 Text 字段设置公共类

于 2011-09-09T12:06:20.350 回答
2

有没有办法与一个听众一起做这件事

您可以使用键盘焦点管理器。请参阅Global Event Listeners中的示例。

于 2011-09-09T15:11:11.723 回答
-1

我想说最简单的方法是在单击时添加一个操作,只需选择所有

private void jTextField1MouseClicked(java.awt.event.MouseEvent evt) {                                         
    jTextField1.selectAll();
}                      
于 2015-08-21T00:06:57.443 回答