2016-08-24 17 views
0

右矢印キーを押したときにシェイプを右に動かすためのキーストーンを追加しました。しかし、それは動作していません。私はキーライストナーの使い方を本当に分かりません。誰かが私を助けることができる?キーリスナーを使用しようとしていてもシェイプを移動しようとしません。

これはコードです:

それが表示され、まだ実行されているwhileループを削除する前にも枠を設定し
package walkingman; 
import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.Color; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

public class WalkingMan extends JPanel implements KeyListener{ 
    int x = 0; 
    int y = 0; 

    @Override 
    public void paint(Graphics g){ 
     super.paint(g); 
     g.fillOval(x, y, 150, 150); 
    } 

    public static void main(String[] args) throws InterruptedException { 
     JFrame frame = new JFrame ("Walking Man"); 
     frame.setSize(1080,720); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     WalkingMan game = new WalkingMan(); 
     frame.add(game); 

     while (true){ 
      game.repaint(); 
      game.keyPressed(e); 
     } 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_RIGHT){ 
      x++; 
     } 
     repaint(); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
    } 
} 
+0

のような非常に明確な方法でコードを再構築しません); 'ここに?キーを押している間に解雇されます。 –

+0

私はそれを削除してもまだ動作しません@BahramdunAdil – Cutter

答えて

1

あなたがパネルにKeyListenerを追加することはありませんあなたのコード

  1. を持ついくつかの問題があります。
  2. JPanelの場合、KeyListenerは、フォーカスがある場合にのみ作用します。&もフォーカスされています。
  3. paintの代わりにpaintComponentを上書きします。
  4. メソッドの最後にsetVisibleを呼び出します。
  5. whileループ全体を取り除くと、問題が発生します。
  6. KeyListenerの代わりにKeyBindingsを使用してください。

キーバインディングなく固定コード:

import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.Color; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

public class WalkingMan extends JPanel implements KeyListener { 
    int x = 0; 
    int y = 0; 

    @Override 
    public void paintComponent(Graphics g) { // Overide paintComponent, not paint 
     super.paintComponent(g); 
     g.fillOval(x, y, 150, 150); 
    } 

    public WalkingMan() { // Class Constructor 
     setFocusable(true); // KeyListeners only work if the component is focusable 
     addKeyListener(this); // Add the KeyListener implemented by this class to the instance 
    } 

    public void createAndShowGUI() { 
     JFrame frame = new JFrame("Walking Man"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     WalkingMan game = new WalkingMan(); 
     frame.add(game); 

     frame.setSize(1080, 720); 
     frame.setVisible(true); // Call setVisible after adding the components 

     game.requestFocusInWindow(); // Request focus for the panel 
    } 

    public static void main(String[] args) throws InterruptedException { 
     new WalkingMan().createAndShowGUI(); 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 
      x++; 
     } 
     repaint(); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 

    } 

    @Override 
    public void keyTyped(KeyEvent e) { 

    } 

} 
+0

これは大変ありがとうございます。あなたが私にしたことを説明できるなら、本当に役に立ちます。ありがとう。 – Cutter

+0

@Cutter正確に分からない部分は何ですか?私は自分のコードをコメントで更新しました。 –

+0

ありがとうございました。本当に助けになった。 – Cutter

0

public static void main(String[] args) throws InterruptedException { 
     JFrame frame = new JFrame ("Walking Man"); 
     frame.setSize(1080,720); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     WalkingMan game = new WalkingMan(); 
     frame.add(game); 

     frame.setVisible(true);//Call visible method here 

    } 
+0

それは動作しませんでした – Cutter

+0

あなたのクラスのコンストラクタを定義していないようです。どのように定義してJFrameを呼び出してそこに見えるようにするのですか? –

+0

どうすればいいですか? – Cutter

0

あなたは `game.keyPressed(E呼び出すなぜなぜこの

import javax.swing.*; 
import java.awt.*; 
import javax.swing.border.LineBorder; 
import java.awt.Color; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

public class WalkingMan extends JFrame{ 
    EmilsKeyClass keyBoard = new EmilsKeyClass(); 

    public WalkingMan(){ 
     add(keyBoard,BorderLayout.CENTER); 

     keyBoard.addKeyListener(new KeyAdapter(){ 
       @Override 
       public void keyPressed(KeyEvent e){ 

        if(e.getKeyCode()== KeyEvent.VK_ENTER){ 
         x++; 
         repaint(); 
        } 
       } 
      }); 
     keyBoard.setFocusable(true); 
    } 
    public static void main(String [] args){ 
     WalkingMan frame = new WalkingMan(); 

     frame.setTitle("Walking Man"); 
     frame.setSize(1080,720); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
    public class EmilsKeyClass extends JPanel{ 
     int x = 0; 
     int y = 0; 

     public EmilsKeyClass(){    
     } 

     @Override 
     public void paintComponent(Graphics g){ 
      super.paintComponent(g); 
      super.paint(g); 
      g.fillOval(x, y, 150, 150); 
      //your code 
     } 
    } 

} 
関連する問題