我一直在阅读java文档,并试图理解关键侦听器及其用法。我设法做出一个简单的程序,其中'w'和's'切换背景颜色,但是当我试图让他们移动一个彩球时,他们停止了响应。我相当肯定这不是一个绘画问题,因为我通读了JavaDocs常见的绘画问题。我已经将JFrame设置为可调整的(或者至少我认为我有)。如果有人能指出我在正确的方向,将不胜感激。添加到JFrame时KeyListeners没有响应
这里是主类
import javax.swing.JFrame;
import java.awt.EventQueue;
public class frame {
public static void main(String[] args){
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
showGui();
}
});
}
public static void showGui(){
JFrame f = new JFrame("Testing..");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setFocusable(true);
f.add(new Gui());
f.setSize(300,300);
f.setVisible(true);
}
}
和GUI/KeyListener的类
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Gui extends JPanel {
public Gui(){
HandlerClass handle = new HandlerClass();
setBorder(BorderFactory.createLineBorder(Color.black));
addKeyListener(handle);
}
int x = 30;
int y = 30;
public void paintComponent(Graphics g){
super.paintComponents(g);
g.setColor(Color.BLUE);
g.fillRect(x, y, 20, 20);
}
private class HandlerClass implements KeyListener{
public void keyTyped(KeyEvent e) {
switch (e.getKeyChar()){
case 'w':
repaint(x,y+1, 20,20);
break;
case 's':
repaint(x,y-1, 20,20);
System.out.println("testing if this fires");
break;
}
}
public void keyPressed(KeyEvent e) {
//todo
}
public void keyReleased(KeyEvent e) {
//todo
}
}
}
在正确的方向的任何勾缝将是非常有益的,谢谢。
双Jinks和1 +重拳! – 2013-04-26 01:49:39
谢谢。这正是我正在寻找的答案。我不确定这是否是我的明显疏忽,或者是否需要彻底改变我对问题的看法。 – Apcragg 2013-04-26 01:51:23