Java 在扩展实现KeyListener的类的类中,使系统调用键未按下
假设我有一个类Java 在扩展实现KeyListener的类的类中,使系统调用键未按下,java,Java,假设我有一个类MyKeyListener,它实现了java.awt.event.KeyListener,这意味着它有一个方法: public void keyPressed(java.awt.event.KeyEvent keyEvent) {} 现在我想为自己创建另一个类MyFrameworkClass,它扩展了MyKeyListener,但有点覆盖了keyPressed()方法 public void keyPressed(int keyCode) {} 显然,这不起作用,因为系统使用j
MyKeyListener
,它实现了java.awt.event.KeyListener
,这意味着它有一个方法:
public void keyPressed(java.awt.event.KeyEvent keyEvent) {}
现在我想为自己创建另一个类MyFrameworkClass
,它扩展了MyKeyListener
,但有点覆盖了keyPressed()
方法
public void keyPressed(int keyCode) {}
显然,这不起作用,因为系统使用java.awt.event.KeyEvent
对象调用keyPressed
,但我现在要求的是int
如果我的按键(int-keyCode)
被重新设置为例如mykeycode(int-keyCode)
,则我的问题将得到解决。然后我可以在MyKeyListener
类中执行类似操作:
public void keyPressed(java.awt.event.KeyEvent keyEvent) {
myKeyPressed(keyEvent.getKeyCode());
}
public void abstract myKeyPressed(int keyCode);
我的问题是:有没有什么方法可以做到这一点,同时保持两种方法的名称相同?
也就是说,让系统调用class
MyKeyListener
中的keyPressed()
,而不是MyFrameworkClass
中的(因为我想从MyKeyListener
手动调用MyFrameworkClass
中的一个,您就在正确的轨道上了。
具有单独签名的两个方法(在您的示例中为参数列表)被视为不同的方法
您可以这样实施您的想法:
package test;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class MyFramework {
static class MyKeyListener implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
keyPressed(e.getKeyCode());
}
public void keyPressed(int keyCode) {}
@Override public void keyTyped(KeyEvent e) { }
@Override public void keyReleased(KeyEvent e) { }
}
static class MyFrameworkClass extends MyKeyListener {
@Override
public void keyPressed(int keyCode) {
System.out.println(String.format("Key pressed: '%d'", keyCode));
}
}
public static void main(String[] args) {
JFrame jFrame = new JFrame("Framework test");
jFrame.setSize(200, 200);
jFrame.addKeyListener(new MyFrameworkClass());
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
}
非常感谢!你的答案不太清楚我最终是怎么做的,但它帮助了我很多。