gpt4 book ai didi

java - 在 JFrame 上使用 KeyListener 移动组件

转载 作者:行者123 更新时间:2023-11-30 09:02:11 26 4
gpt4 key购买 nike

所以我想将字符串朝用户插入的方向移动,但它不起作用。它与 mouselistener 一起工作,所以我认为这就足够了。我应该将听众添加到其他东西吗?

public class Snake extends JComponent implements KeyListener{

private int x;
private int y;
private String s;

public Snake(String s, int x, int y){
this.s = s;
this.x = x;
this.y = y;
addKeyListener(this);
}

@Override
protected void paintComponent(Graphics g) {
g.drawString(s, x, y);
}


@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
switch(code) {
case KeyEvent.VK_UP:
y-=15;
case KeyEvent.VK_DOWN:
y+=15;
case KeyEvent.VK_RIGHT:
x+=15;
case KeyEvent.VK_LEFT:
x-=15;
}
repaint();
}

@Override
public void keyReleased(KeyEvent e) {

}
}

public class Game {

public static void main(String[] args){
JFrame frame = new JFrame("Up Up And Away!");
JComponent star = new Snake("*", 250, 100);
frame.add(star);
frame.setSize(500, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

最佳答案

正如其他人提到的。使用 Key Bindings 可能更好.但是在您的情况下,您的焦点在其他地方,因此您的组件只需要捕获焦点。只需在主体中添加 star.grabFocus();。即:

public static void main(String[] args){
JFrame frame = new JFrame("Up Up And Away!");
JComponent star = new Test2("*", 250, 100);
frame.add(star);
frame.setSize(500, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

star.grabFocus();
}

那么它应该可以工作了。

关于java - 在 JFrame 上使用 KeyListener 移动组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093989/

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