2016-05-09 3 views
1

私は助けを借りても左矢印キーを押しながらJLabelを動かすことができませんでした。私は数多くの方法を試したが、まだ進歩は見られなかった。私は間違って何をしていますか?私は左のキー(とにかく仮定されている)を押すときにX変数を1つ左に移動することによってコードを設定し、その代わりにその場所に留まります。左キーでJLabelを移動しますか?

package com.game.user; 

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

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 

public class Main { 
    static int x = 474; 
    static int y = 202; 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("game"); 
     frame.setVisible(true); 
     frame.setBounds(700, 700, 700, 700); 
     frame.setLayout(null); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel label = new JLabel(); 
     label.setIcon(new ImageIcon("E:\\sword.png")); 
     label.setBounds(x, y, 24, 24); 
     label.setVisible(true); 
     JPanel contentPane = new JPanel(); 
     frame.setContentPane(contentPane); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(null); 
     contentPane.add(label); 
    /* Keyboard key = new Keyboard(); 
      addKeyListener(key); 
     */label.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyPressed(KeyEvent e) { 
      if(e.getKeyChar()==KeyEvent.VK_LEFT){ 
       x--; 
      } 



      } 
      }); 

      /*String keyString; 
     if (id == KeyEvent.KEY_TYPED) { 
      char c = e.getKeyChar(); 
      keyString = "key character = '" + c + "'"; 
      System.out.print("hello"); 
     } else { 
      int keyCode = e.getKeyCode(); 
      keyString = "key code = " + keyCode+ " ("+ KeyEvent.getKeyText(keyCode)+ ")"; 
     } 
      } 
     }); 

    } 

    private static void addKeyListener(Keyboard key) { 
     // TODO Auto-generated method stub 

    }*/ 

    }} 
+0

あなたは' label.setBoundsを試してみましたスイングでどのように機能するかをどのように影響するかを見るのに最適なリンクがありますか? –

+0

問題は焦点が合っています – DarkV1

答えて

0

フォーカスが問題です。イベント(keyPressed)は、オブジェクトがフォーカス可能でフォーカスがある場合にのみ発生します。 JLabelにはフォーカスがないため、キーイベントは発生しません。ここでKey Bindings API

を使用し修正するために

は一例です。

this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0, false), "right"); 
this.getActionMap().put("right", new AbstractAction() { 
    public void actionPerformed(ActionEvent e) { 
     //increment X as it is moving Right 
    } 
}); 

次に、新しいX-Yの値が設定された後のJLabelを更新するために...

lbl.revalidate(); 

を呼び出します。 ( - X、Y、24、24) `

ここでの焦点は、あなたのキーの押下が

http://www.javaworld.com/article/2076720/core-java/focus-on-swing.html

+0

@Andymcはこれが役立つことを願っています – DarkV1

関連する問題