nav*_*yad 0 java swing keyevent keylistener jtextfield
我有两个文本字段(tf1和tf2),在其中使用KeyEvent获取键入的字符.
JTextField tf1 = new JTextField(10);
JTextField tf2 = new JTextField(10);
tf1.setFocusable(true);
tf2.setFocusable(true);
//regerstring for event
tf1.addKeyListener(new KeyHandler(tf1, tf2));
tf2.addKeyListener(new KeyHandler(tf1, tf2));
class KeyHandler extends KeyAdapter{
JTextField tf1;
JTextField tf2;
KeyHandler(JTextField tf1, JTextField tf2){
tf1 = this.tf1;
tf2 = this.tf2;
}
public void keyTyped(KeyEvent e){
char ch = e.getKeyChar();
System.out.println(e.getKeyLocation());
if(e.getSource() == tf1)
System.out.println("tf1");
else if (e.getSource() == tf2)
System.out.println("tf2");
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了KeyEvent类的getSource(),但它返回了JTextField的对象,我必须在tf1和tf2之间进行区分.
如何在keyTyped()中获取关联的textfiled引用
很难100%肯定,但看起来你有一个范围问题.您的密钥处理程序无法查看您的字段.
public void someMethod() {
JTextField tf1 = new JTextField(10);
JTextField tf2 = new JTextField(10);
KeyHandler handler = new KeyHandler();
tf1.addKeyListener(handler);
tf2.addKeyListener(handler);
}
public class KeyHandler extends KeyAdapter{
public void keyTyped(KeyEvent e){
// Error, tf1 is unknown...
if (e.getSource() == tf1) {...}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您希望能够比较您拥有的字段,则有两种选择.将字段声明为实例字段或通过其name属性标识字段.
public class SomeClass extends ... {
private JTextField tf1;
private JTextField tf2;
public void someMethod() {
JTextField tf1 = new JTextField(10);
JTextField tf2 = new JTextField(10);
KeyHandler handler = new KeyHandler();
tf1.addKeyListener(handler);
tf2.addKeyListener(handler);
}
public class KeyHandler extends KeyAdapter{
public void keyTyped(KeyEvent e){
// tf1 is now within scope :D
if (e.getSource() == tf1) {...}
}
}
}
Run Code Online (Sandbox Code Playgroud)
public void someMethod() {
JTextField tf1 = new JTextField(10);
tf1.setName("tf1");
JTextField tf2 = new JTextField(10);
tf2.setName("tf2");
KeyHandler handler = new KeyHandler();
tf1.addKeyListener(handler);
tf2.addKeyListener(handler);
}
public class KeyHandler extends KeyAdapter{
public void keyTyped(KeyEvent e){
Object source = e.getSource();
if (source instanceof JTextField) {
JTextField field = (JTextField)source;
String name = field.getName();
if ("tf1".equals(name)) {
// Hello TextField #1
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我不知道你为什么要做你想做的事情,但是KeyListeners不是最适合过滤或监控文本字段更改的选项.首先,您无法保证将在何种顺序调用Document侦听器,在触发侦听器之前可能会更新字段,也可能不会更新字段.其次,如果用户将文本粘贴到字段中,则不会触发它们.
更好的选择是使用a DocumentListener,它可用于监视对字段的更改Document或a DocumentFilter,可用于过滤发送到文档的内容.
| 归档时间: |
|
| 查看次数: |
3937 次 |
| 最近记录: |