2015-05-14 83 views
0

我有一個框架,它作爲一個矩形。 我想知道如果我點擊箭頭鍵,如何移動矩形。 我搜索,並找到一些例子,但毫無效果(奇怪,因爲它應該是一個簡單的事)如何用箭頭鍵移動矩形?

這裏是我的Rectangle類:

public class PlayerOne implements KeyListener { 

    int x,y; 
    public PlayerOne(JPanel panel){ 
     this.x = panel.getWidth()/2; 
     this.y = panel.getHeight()/2; 
    } 

    public void paint(Graphics g){ 
     g.setColor(Color.RED); 
     g.fillRect(125, 480, 60, 10); 
    } 

    @Override 
    public void keyPressed(KeyEvent arg0) { 
     // TODO Auto-generated method stub 
     int keyCode = arg0.getKeyCode(); 
     if(keyCode == arg0.VK_KP_RIGHT){ 
      this.x+=5; 
     } 
    } 

    @Override 
    public void keyReleased(KeyEvent arg0) { 
     // TODO Auto-generated method stub   
    } 

    @Override 
    public void keyTyped(KeyEvent arg0) { 
     // TODO Auto-generated method stub   
    }  
} 

這是主要的:

public class PingPong extends JPanel { 

    private static final long serialVersionUID = -4170574729049260633L; 

    //Initialize 
    Table table = new Table(); 
    PlayerOne po = new PlayerOne(this); 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     table.paint(g); 
     po.repaint(g); 
    } 

    public static void main(String[] args){ 
     JFrame frame = new JFrame();    
     frame.setTitle("Pong"); 
     frame.setSize(326, 533); 
     frame.add(new PingPong()).setBackground(Color.DARK_GRAY); 
     frame.getContentPane().setBackground(Color.DARK_GRAY); 
     frame.setVisible(true); 
    }  
} 
+0

您需要'KeyListener'。 –

+0

@CoolGuy我增加了一個,但是我不知道如何讓這個矩形移動...我編輯了我的文章,請你看看嗎? –

+0

通過使用KeyBindigs而不是KeyListener,paint應該是paintComponent(具有super。paintComponent),而不是KeyListener的成員,或者不是真正的JComponent的成員,例如, JPanel,繪畫應該通過repaint()從paintComponent – mKorbel

回答

2

有一堆的問題在這裏:

的問題是,您的矩形圖是硬編碼的,在這裏證明:

public void paint(Graphics g){ 
    g.setColor(Color.RED); 
    g.fillRect(125, 480, 60, 10); 
} 

您需要使用您的x變量,而不是125

爲了接受的按鍵事件,您的JPanel需要接受焦點,這可以通過以下行來實現:

setFocusable(true); 
requestFocusInWindow(); 

您現在將收到鍵盤事件並更改您的x值。不幸的是,這不會引發重畫,所以你的盒子仍然不會移動。

你應該真的把你的課程分開一點,因爲你的責任分配有點奇怪。當一個關鍵事件發生時,你需要告訴你的JPanel自己來更新屏幕上的反映。

+0

我改變了它,它仍然不會移動..如何增加x後重新繪製PlayerOne? –

+0

[例如](http://stackoverflow.com/a/7940227/714968)到關於爲@CoolGuy進行繪畫的問題(SwingTimer) – mKorbel