类的Java KeyListener未扩展jpanel或其他内容
我正在尝试在名为类的Java KeyListener未扩展jpanel或其他内容,java,swing,jpanel,keylistener,Java,Swing,Jpanel,Keylistener,我正在尝试在名为Player的新数据类型中创建一个KeyListener,它实现了KeyListner。我如何使Player成为自己的KeyListener(即this.addKeyListner(this)),而不进一步实现或扩展任何内容?如果这是不可能的,我希望Player扩展/实现什么来避免类中的无关方法 编辑:为了澄清这一点,我不是在问如何在不使用keyReleased、keyPressed和keyTyped方法的情况下实现KeyListener。例如,我在问如何让Player在不使用J
Player
的新数据类型中创建一个KeyListener,它实现了KeyListner。我如何使Player
成为自己的KeyListener(即this.addKeyListner(this)
),而不进一步实现或扩展任何内容?如果这是不可能的,我希望Player
扩展/实现什么来避免类中的无关方法
编辑:为了澄清这一点,我不是在问如何在不使用keyReleased、keyPressed和keyTyped方法的情况下实现KeyListener。例如,我在问如何让Player在不使用JPanel的情况下将自己添加为KeyListener。如果实现KeyListener(假设没有
抽象的实例),那么必须实现这3种方法。它们与接口无关,因为这是一个键可能发生的三件事,它们可能与您无关,但实现它们只需要几行代码
void keyPressed(KeyEvent e)
当按下某个键时调用
void keyReleased(KeyEvent e)
在释放密钥时调用
void keyTyped(KeyEvent e)
在键入密钥时调用
只有3个,这是接口的本质。步骤:
- 创建一个扩展JPanel的类,比如MyJPanel
- JPanel类应该提供修改其属性的方法
- 创建一个单独的类来实现KeyListener,比如Player
- 将Player的对象添加到JPanel类
- 在关键事件上从Player类调用JPanel方法,然后重新绘制
代码:
面板类:
什么无关的方法keyPressed(KeyEvent)
KeyReleased(KeyEvent e)
keyTyped(KeyEvent e)
它们在某种程度上都是相关的,或者不需要任何东西……如果Player
实现了KeyListener,就必须实现RossC说的方法。除非它是抽象的。实际上,请参见。这就是我问的原因。问题的关键是要弄清楚你到底想完成什么。KeyEvents与GUI程序一起使用。假设你在一个控制台程序中有一个播放器,然后你键入一个键。什么也不会发生。这就是为什么我再次问,你想实现什么
public class MyJPanel extends JPanel {
private int x = 0;
private int y = 0;
public MyJPanel() {
addKeyListener(new Player(this));
setFocusable(true);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
g.fillRect(x, y, 100, 100);
}
public static void main(String[] args) {
MyJPanel player = new MyJPanel();
player.setSize(200, 200);
JFrame frame = new JFrame();
frame.add(player);
frame.setLayout(null);
frame.setTitle("Key listener example");
frame.setSize(500, 500);
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void incrementX() {
x++;
if (x > 500)
x = 500;
}
void decrementX() {
x--;
if (x < 0)
x = 0;
}
void incrementY() {
y++;
if (y > 500)
y = 500;
}
void decrementY() {
y--;
if (y < 0)
y = 0;
}
}
public class Player implements KeyListener {
MyJPanel panel;
public Player(MyJPanel myJPanel) {
this.panel = myJPanel;
}
@Override
public void keyPressed(KeyEvent pKeyEvent) {
int key = pKeyEvent.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
panel.decrementX();
} else if (key == KeyEvent.VK_RIGHT) {
panel.incrementX();
} else if (key == KeyEvent.VK_UP) {
panel.decrementY();
} else if (key == KeyEvent.VK_DOWN) {
panel.incrementY();
}
panel.repaint();
}
@Override
public void keyReleased(KeyEvent pKeyEvent) {
}
@Override
public void keyTyped(KeyEvent pKeyEvent) {
}
}