[英]ActionListener and KeyListener not working at all
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方法。
JPanel
不監聽Action
,它是一個容器而不是控制器。 因此,它沒有addActionListener(actionListener)
函數。 requestFocusInWindow()
以獲取焦點。 ActionListener
。 利用內聯匿名類或聲明另一個實現ActionListener
類 KeyListener
。 檢查官方教程頁面:
1)您的ActionListener
未附加到JPanel
及其上的組件,因為它不起作用。
2)不要使用KeyListener
而不是使用Key Bindings :
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0), "doSomething1");
getActionMap().put("doSomething1", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
left = !left;
if (left == true) {
xv = -2;
}
}
});
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0), "doSomething2");
getActionMap().put("doSomething2", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
right = !right;
if (right == true) {
xv = 2;
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.