在大量的jTextField中选择所有焦点

时间:2011-09-09 11:57:54

标签: java swing focus jtextfield selectall

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

由于

4 个答案:

答案 0 :(得分:10)

为此任务创建一个类:

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);
            }
        });
    }
}

示例用法(以下代码):

screenshot

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);
}

答案 1 :(得分:2)

在类上创建并扩展JTextField现在可以在此类中实现所需的任何内容。你可以在这里创建像这样的JTextField的对象

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

而不是这样做

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

所以你必须设置文本字段的公共类

答案 2 :(得分:2)

  

有没有办法用一个监听器

来做到这一点

您可以使用KeyboardFocusManager。请参阅Global Event Listeners中的示例。

答案 3 :(得分:0)

我想说这样做的简单方法是在点击上添加一个只选择所有

的动作
private void jTextField1MouseClicked(java.awt.event.MouseEvent evt) {                                         
    jTextField1.selectAll();
}