gpt4 book ai didi

java - 获取KeyEvent的来源

转载 作者:行者123 更新时间:2023-12-01 06:40:23 27 4
gpt4 key购买 nike

我有两个文本字段(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");

}

我尝试过 KeyEvent 类的 getSource() 但它返回 JTextField 的对象,我必须区分 tf1 和 tf2。

如何在 keyTyped() 中获取关联的文本文件引用

最佳答案

很难 100% 确定,但您似乎遇到了范围问题。您的 key 处理程序看不到您的字段。

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) {...}
}
}

如果您希望能够比较您拥有的字段,您有两个选择。将字段声明为实例字段或通过其 name 属性标识字段。

选项 1

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) {...}
}
}
}

选项 2

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

免责声明

现在,我不知道您为什么想做您想做的事情,但是 KeyListener 并不是过滤或监视文本字段更改的最合适选项。其一,您无法保证您的监听器将以什么顺序被调用,在监听器被触发之前,Document 字段可能会也可能不会更新。其次,如果用户将文本粘贴到字段中,它们不会被触发。

更好的选择是使用 DocumentListener ,可用于监视字段 DocumentDocumentFilter 的更改,可用于过滤发送到文档的内容。

关于java - 获取KeyEvent的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13046871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com