Java KeyListener不';行不通
我有以下两个类,main类(SamG)和Panll类。我已经在Panll类中实现了KeyListener,但它似乎不起作用Java KeyListener不';行不通,java,keylistener,Java,Keylistener,我有以下两个类,main类(SamG)和Panll类。我已经在Panll类中实现了KeyListener,但它似乎不起作用 public class SamG { public static void main(String[] args) { JFrame jf = new JFrame("My APP"); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(800
public class SamG {
public static void main(String[] args) {
JFrame jf = new JFrame("My APP");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(800, 400);
jf.setVisible(true);
jf.pack();
jf.setContentPane(new Panll());
}
}
public class Panll extends JPanel implements KeyListener {
int x=100,y=100;
boolean run=true;
Panll() {
addKeyListener(this);
}
@Override
public void paint (Graphics g) {
super.repaint();
g.clearRect(0, 0, 800, 400);
update();
draw(g);
try {
Thread.sleep(17);
} catch (InterruptedException ex) {
Logger.getLogger(Panll.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void update(){
x++;
y++;
}
public void draw(Graphics g){
g.drawOval(x, y, 100, 100);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
}
}
如果不显式地允许JPanel使用
setFocusable(true),则无法对其进行聚焦代码>。如果你加上这一行,你可以把注意力集中在JPanel上。如果按下任何按钮,KeyListener工作正常如果不显式地允许JPanel使用setFocusable(true),则无法对焦JPanel代码>。如果你加上这一行,你可以把注意力集中在JPanel上。然后,如果按下任何按钮,KeyListener工作正常首先从不将主线程发送到睡眠状态。创建一个新线程,定期调用面板的重新绘制。
Second不要使用paint()
方法来绘制你的东西。改用paintComponent()
方法。
Third将您的KeyListener
添加到您的JFrame
。您的JPanel
将不会收到KeyEvents
,因为它从未获得焦点。首先从不将主线程发送到睡眠状态。创建一个新线程,定期调用面板的重新绘制。
Second不要使用paint()
方法来绘制你的东西。改用paintComponent()
方法。
Third将您的KeyListener
添加到您的JFrame
。您的JPanel
将不会收到KeyEvents
,因为它从未得到关注。您的问题不太清楚。检查一下,你的问题不太清楚。检查这个