我的应用程序中有很多jTextFields(大约34个jTextFields),我希望所有人在获得焦点时选择所有文本,并在焦点丢失时不选择任何文本。
有没有办法用一个监听器做这个或者我应该为这34个jTextField中的每一个写一个“FocusGained”和一个“FocusLost”?
由于
答案 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);
}
});
}
}
示例用法(以下代码):
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();
}