![](/img/trans.png)
[英]How do I add a keystroke inside of keyPressed(KeyEvent e) method to change color of ball? simple KeyListener demo
[英]How do I make a (keyPressed) KeyListener?
我試圖編寫一個非常簡單的程序,使您可以使用箭頭鍵控制精靈並在屏幕上移動。 據我了解,要做到這一點,我需要一個keyPressed()
KeyListener
。 我相信我是根據Java Doc正確執行此操作的,但是當我按指定的鍵時,它不會返回正確的輸出。 有人可以告訴我我的代碼有什么問題嗎,如果可能,請提供此類用法的簡單示例? 謝謝!
(注意,代碼未完成)
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Display extends JPanel implements ActionListener, KeyListener {
Display() {
// super();
loadImages();
initTimer();
this.addKeyListener(this);
}
BufferedImage sprite;
Timer timer;
int up = 0;
public void loadImages() {
File spriteImage = new File("Pacman_sprite.png");
try {
sprite = ImageIO.read(spriteImage);
} catch (IOException e) {
System.out.println("Sprite import failed");
}
}
public void initTimer() {
timer = new Timer(100, this);
timer.start();
this.addKeyListener(this);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
System.out.println("Key press registered"); //does not print this?
if (key == KeyEvent.VK_UP) {
System.out.println("sucess"); // does not print this?
up++;
repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("release");
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.WHITE);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(sprite, 500, 500 + up, null);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
repaint();
}
}
編輯:可能在這里找到了答案。 我將密鑰處理代碼移到了一個名為KeyHandler的新類中,然后將以下兩行添加到了構造函數中:
addKeyListener(new KeyHandler());
setFocusable(true);
現在它似乎工作正常(至少在某種程度上它正在檢測何時按下向上鍵。我的圖形卻沒有。)
您沒有將偵聽器添加到JPanel
。
注意:我建議您更改設計。 現在, Display
類既是JPanel
又是Listener
(在我看來這沒有意義)。
但是要在代碼中添加偵聽器,請執行以下操作:
this.addKeyListener(this); // This looks awkward right. That's why you should change the design.
在您的構造函數中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.