2012-08-02 35 views
0

我正在用Java編寫基本程序。我輸入此代碼的工作:Java輸入不能用於畫布

package main; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyAdapter; 

public class Input extends KeyAdapter{ 
    public void keyPressed(KeyEvent ke){ 
     _press[ke.getKeyCode()] = true; 
     _pressed[ke.getKeyCode()] = true; 
    } 
    public void keyReleased(KeyEvent ke){ 
     _press[ke.getKeyCode()] = false; 
     _released[ke.getKeyCode()] = true; 
    } 
    public void update(){ 
     for (int i = 0; i < _press.length; i ++){ 
      _pressed[i] = false; 
      _released[i] = false; 
     } 
    } 
    /** 
    * checks if a key is being pressed 
    * @param key an integer representing a key(Key class recommended) 
    * @return boolean 
    */ 
    public static boolean check(int key){ 
     if (_press[key]) return true; else return false; 
    } 
    /** 
    * checks if a key was pressed 
    * @param key an integer representing a key(Key class recommended) 
    * @return boolean 
    */ 
    public static boolean pressed(int key){ 
     if (_pressed[key]) return true; else return false; 
    } 
    /** 
    * checks if a key was released 
    * @param key an integer representing a key(Key class recommended) 
    * @return boolean 
    */ 
    public static boolean released(int key){ 
     if (_released[key]) return true; else return false; 
    } 
    protected static boolean[] _press = new boolean[128]; 
    protected static boolean[] _pressed = new boolean[128]; 
    protected static boolean[] _released = new boolean[128]; 
} 

我跑的測試中,我得到了一個基本的實體系統使用一個ArrayList的工作,一切都很好。

但後來我遇到了圖形。我設置了一個Jcanvas類(擴展了Canvas),但是將它添加到我的框架中後,圖形就可以正常工作,但是我的輸入不再起作用。

canvas = new Jcanvas(); 
canvas.setSize(width, height); 
canvas.setBackground(Color.RED); 
frame.add(canvas); 

//input 
frame.addKeyListener(new Input()); 

有沒有辦法解決這個問題,還是我會卡住圖形或輸入?

這裏是我的參考級Jcanvas:

package main; 
import java.awt.Canvas; 
import java.awt.Graphics; 

public class Jcanvas extends Canvas{ 
    static final long serialVersionUID = 42L; 
    public void paint(Graphics g){ 
    } 
    public void drawrect(int x, int y, int width, int height){ 
     Graphics g = getGraphics(); 
     //g.setColor(Color.blue); 
     g.drawRect(x, y, width, height); 
    } 
    public void drawfill(Graphics g, int x, int y, int width, int height){ 
    } 
} 

回答

2

嘗試增加:

//input 
Input input = new Input(); 
frame.addKeyListener(input); 
canvas.addKeyListener(input);