[EDITED] 如何编写一个在键盘输入时响应的类,而不将此类扩展到任何类型的swing组件。
如果我写这样的课:
public class Test implements KeyListener {
public Test(){}
@Override
public void keyPressed(KeyEvent e) { ... }
@Override
public void ketTyped(KeyEvent e) { ... }
.
.
.
}
这不起作用,因为我无法从我的Test课程中获得焦点,对吧? 相反,如果我写一个类:
public class Test2 extends JPanel{
public Test2 {
addKeyListener(new KeyListener() {....});
requestFocusInWindow();
}
}
这项工作,但这不是我的目标
答案 0 :(得分:0)
任何类都可以实现KeyListener
接口。然后,您可以创建此类的实例,并使用addKeyListener(...)
方法将侦听器添加到Swing组件。
例如:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyKeyListener extends KeyAdapter
{
@Override
public void keyPressed(KeyEvent e)
{
Component c = (Component)e.getSource();
System.out.println(c);
System.out.println(e);
}
private static void createAndShowGUI()
{
JPanel panel = new JPanel();
panel.setFocusable( true );
panel.addKeyListener( new MyKeyListener() );
JFrame frame = new JFrame("MyKeyListener");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( panel );
frame.setSize(200, 200);
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater( () -> createAndShowGUI() );
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}
KeyAdapter类是一个实现KeyListener类的所有方法的类。因此,上面的代码扩展了该类,只覆盖了提供自定义代码的方法。