gpt4 book ai didi

java - ActionListener 和 KeyListener 根本不工作

转载 作者:行者123 更新时间:2023-12-01 07:28:41 26 4
gpt4 key购买 nike

package Objects;

import javax.swing.JPanel;
import javax.swing.Timer;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;



public class PowerBar extends JPanel implements ActionListener, KeyListener {

private double x;
private final double y = 420;
private double xv = 0;
private final int width, height;
private boolean left = false, right = false;
private Timer t = new Timer(5, this);

public PowerBar(JPanel j) {
width = j.getWidth();
height = j.getHeight();
x = 180;

t.start();
this.addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);

}

public void move() {

}

public void powerbarPosition() {

}

@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Rectangle2D rect = new Rectangle2D.Double(x, y, 100, 15);
g2.setColor(Color.DARK_GRAY);
g2.fill(rect);
}

@Override
public void actionPerformed(ActionEvent ae) {
x += xv;
repaint();
}

@Override
public void keyPressed(KeyEvent ev) {
if (ev.getKeyCode() == KeyEvent.VK_LEFT) {
left = !left;
if (left == true) {
xv = -2;
} else if (ev.getKeyCode() == KeyEvent.VK_RIGHT) {
right = !right;
if (right == true) {
xv = 2;
}
}
}
}

@Override
public void keyReleased(KeyEvent ev) {

}

@Override
public void keyTyped(KeyEvent ke) {

}

}

我对编程有点陌生,这是我编程的第一个游戏。我试图让电源栏随左右键移动,但按下这些键时没有任何响应。电源条在名为 DrawMain 的单独类中绘制,该类使用 PaintComponent 方法。

最佳答案

  1. JPanel 不监听 Action,它是一个容器而不是 Controller 。因此,它没有 addActionListener(actionListener) 函数。
  2. 要监听按键事件(按下、释放等),目标组件必须具有焦点。不过,如果您愿意,可以在目标组件上调用 requestFocusInWindow() 来获得焦点。
  3. 最好不要为不监听此类监听器的类实现监听器,在您的上下文中它是 ActionListener。使用内联匿名类或声明另一个实现 ActionListener
  4. 的类
  5. 正如 @AndrewThompson 和 stackoverflow 的其他 Swing gigs 所建议的那样,最好使用键绑定(bind),使用键输入映射和操作输入映射到组件,这是相当更高级别的实现。尝试尽可能避免使用较低级别的 AWT 实现 KeyListener

查看官方教程页面:

  1. How to use Key Bingings
  2. How to Write a Key Listener
  3. How to Write an Action Listener

关于java - ActionListener 和 KeyListener 根本不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20310272/

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