键侦听器 Java
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12410891/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
KeyListener Java
提问by OOkhan
I am trying to use KeyListener in my code.... But it's not working, the KeyListener not responding I think...
我试图在我的代码中使用 KeyListener ......但它不起作用,KeyListener 没有响应我认为......
If you guys see anything wrong please tell me. I don't know why it's not working. Thanks in advance.
如果你们看到任何错误,请告诉我。我不知道为什么它不起作用。提前致谢。
Here is the code.
这是代码。
import javax.swing.*;
import java.awt.*;
import java.util.Scanner;
public class Main extends JFrame {
static void drawFrame(JFrame frame) {
frame.setSize(610, 805);
frame.setLocation(145, 15);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
JFrame frame = new JFrame("PacMan");
drawFrame(frame);
MyPanel panel = new MyPanel();
panel.setBounds(00, 00, 610, 800);
frame.setLayout(null);
frame.getContentPane().setLayout(null);
frame.getContentPane().add(panel);
}
}
MyPanel Class
我的面板类
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MyPanel extends JPanel implements KeyListener {
private int xpac = 285, ypac = 570;
public MyPanel() {
this.requestFocus();
this.requestFocusInWindow();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
drawMap1(g);
drawPacman(g);
addKeyListener(this);
}
void drawMap1(Graphics g) {
BufferedImage image = null;
try {
image = ImageIO.read(new File("pacmap1.png"));
} catch (IOException e) {
System.out.println("Can't find the Image.");
}
setBackground(Color.BLACK);
g.drawImage(image, 0, 0, null);
}
void drawPacman(Graphics g) {
int x = xpac, y = ypac;
BufferedImage image = null;
try {
image = ImageIO.read(new File("pacright.png"));
} catch (IOException e) {
System.out.println("Can't find the Image.");
}
g.drawImage(image, x, y, null);
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("Hi there Buddy");
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("Hi there Buddy");
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("Hi there Buddy");
}
}
回答by Gilberto Torrezan
You should put the this.addKeyListener(this);
in your MyPanel class constructor, not the paintComponent method.
您应该将 放在this.addKeyListener(this);
MyPanel 类构造函数中,而不是paintComponent 方法中。
回答by Dan D.
You should just comment out the addKeyListener
in the MyPanel
class and do this in the Main class after you instantiate the MyPanel
:
您应该addKeyListener
在MyPanel
类中注释掉 ,并在实例化后在主类中执行此操作MyPanel
:
frame.addKeyListener(panel);
回答by Robin
Please always use a KeyBindings
for such Tasks. See: http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html
请始终KeyBindings
对此类任务使用 a 。请参阅:http: //docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html
As a little tip, I would recommend you to implement KeyListener
as an AnonymousClass
.
作为一个小技巧,我建议您将其KeyListener
作为AnonymousClass
.