我一直在閱讀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