我的应用程序中有很多 jTextFields(大约 34 个 jTextFields),我希望他们所有人在获得焦点时都选择所有文本,并且在失去焦点时不选择任何文本。
有没有办法用一个听众来做这件事,或者我应该为这 34 个 jTextField 中的每一个写一个“FocusGained”和一个“FocusLost”?
谢谢
我的应用程序中有很多 jTextFields(大约 34 个 jTextFields),我希望他们所有人在获得焦点时都选择所有文本,并且在失去焦点时不选择任何文本。
有没有办法用一个听众来做这件事,或者我应该为这 34 个 jTextField 中的每一个写一个“FocusGained”和一个“FocusLost”?
谢谢
为此任务创建一个类:
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);
}
在类上创建并扩展 JTextField 现在在此类中实现您想要的任何内容。在哪里可以像这样创建 JTextField 对象
JTextField txt1 = new JTextField();
frm.add(txt1);
而不是这样做
JTextField txt1 = new CustomText();
frm.add(txt1);
所以你必须为 Text 字段设置公共类
有没有办法与一个听众一起做这件事
您可以使用键盘焦点管理器。请参阅Global Event Listeners中的示例。
我想说最简单的方法是在单击时添加一个操作,只需选择所有
private void jTextField1MouseClicked(java.awt.event.MouseEvent evt) {
jTextField1.selectAll();
}