2015-09-09 36 views
0

我在java的一個小遊戲(RPG)上工作,我需要在不同面板中向上,向下,向左,向右移動我的角色,代表我的遊戲的每個級別。用於多個JPanels的Java swing鍵綁定

我首先使用KeyListener,這對於第一個面板工作正常,但對另一個不起作用。

我儘量讓與誰在爭論中做出與panelNumber運動的方法這項工作:(這是第一個面板唯一的工作):

private void panelSalle2KeyPressed(java.awt.event.KeyEvent evt) {          
     int keyCode = evt.getKeyCode(); 
     deplacementJoueurSalle(keyCode, 2); 
    } 

private void characterMove(int keyCode, int panelNumber){ 
    JLabel panelCharacterSprite= new JLabel(); 

    switch(panelNumber){ 
     case 1: 
      panelCharacterSprite= characterPanel1; 
      break; 
     case 2: 
      panelCharacterSprite= characterPanel2; 
      break; 
     case 3: 
      panelCharacterSprite= imagePersoSalle3; 
      break; 
     default: 
      imagePerso = null; 
      break; 
    } 
    int x = panelCharacterSprite.getX(); 
    int y = panelCharacterSprite.getY(); 

    switch(keyCode) { 
     case KeyEvent.VK_UP: 
     if(y-10 >= -3){ 
      panelCharacterSprite.setLocation(x, y-10); 
     } 
     break; 
     case KeyEvent.VK_DOWN: 
     if(y+10 <= 417){ 
      panelCharacterSprite.setLocation(x, y+10); 
     } 
     break; 
     case KeyEvent.VK_LEFT: 
     if(x-10 >= -1){ 
      panelCharacterSprite.setLocation(x-10, y); 
     } 
     break; 
     case panelCharacterSprite.VK_RIGHT : 
     if(x+10 <= 671){ 
      panelCharacterSprite.setLocation(x+10, y); 
     } 

我看到計算器,我必須使用鑰匙綁定爲使這個,但我真的不明白它的工作..它有一個機會,我可以使用keylistener工作?

Thx

+0

請參閱[getInputMap](http://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#getInputMap-int-)和[getActionMap](http:// docs。 oracle.com/javase/8/docs/api/javax/swing/JComponent.html#getActionMap--)。 – VGR

+0

它是如何工作的?我需要做一個「WHEN_IN_FOCUSED_WINDOW」? – barnab21

+2

'我看到在stackoverflow,我必須使用鍵綁定'是的,因爲鍵綁定是更好的解決方案。 「有沒有機會我可以用keylistener工作?」不,因爲只有一個組件可以有焦點。這就是爲什麼總是建議關鍵綁定的原因,它不受這個限制。 – camickr

回答

1

結賬Motion Using the Keyboard

KeyboardAnimation.java示例顯示瞭如何在兩個不同的組件上使用密鑰綁定,並讓兩個組件在按下某個鍵的同時執行動畫。