2016-03-26 14 views
1

私はJavaでゲームを作っていますが、ボールはユーザーコントロールなしで常に前進しますが、ユーザーは上下の矢印キーを使ってボールの垂直方向の動きをコントロールできますしかし、私は主なメソッドを介して、私のJFrameにあるものをkeylistenerクラス/それを追加することに固執しています。基本的には、私はadd(keylistener_class/method)を実行し、Java(正式には)は、クラスまたはメソッドがコンポーネントではないと不平を言う。私の質問は、私がJフレームにキーストーナーを追加する方法です。あなたはこの方法であなたのJPanelにのKeyListenerを追加することができます main()にkeylistenerを追加しても動作しない

 
    package org.ultraluminous.vertiball;

import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class Game extends JPanel{ static int x = 0; static int y = 0; static int ys = 0; private static void shift(){ x+=1; y+=ys; } public static void event(KeyEvent e){ if(e.getKeyCode() == KeyEvent.VK_UP){ ys = 1; } if (e.getKeyCode() == KeyEvent.VK_DOWN){ ys = -1; } } public class key{ public void Listen() { KeyListener listener = new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } }; addKeyListener(listener); setFocusable(true); } } @Override public void paint(Graphics g){ super.paint(g); Graphics2D Graph = (Graphics2D) g; Graph.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Graph.setColor(Color.BLUE); Graph.drawOval(x, y, 50, 50); Graph.fillOval(x, y, 50, 50); } public static void main (String[] args){ JFrame Win = new JFrame("Pong"); Game game = new Game(); Win.add(new Game()); //Win.add... add what? I need to add the key listener here //but seem to be unable to. Win.setResizable(false); Win.setSize(900, 600); Win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Win.setVisible(true); while (true) { shift(); Win.repaint(); try { Thread.sleep(10); } catch (InterruptedException e){ e.printStackTrace(); } } }

答えて

1

私はあなたのJFrameにKeyListenerを追加して動作させました。代わりに、KeyListenerのための別のクラスを作成し、それを(匿名の内部クラスを使用する代わりに)追加することもできます。ここに私が追加したものがあります:

public static void main (String[] args){ 
     JFrame Win = new JFrame("Pong"); 
      Game game = new Game(); 
      Win.add(new Game()); 
      Win.addKeyListener(new KeyListener() { 

       @Override 
       public void keyTyped(KeyEvent e) { 
       } 

       @Override 
       public void keyPressed(KeyEvent e) { 
        if(e.getKeyCode() == KeyEvent.VK_UP){ 
         ys = -1; 
        } 
        if (e.getKeyCode() == KeyEvent.VK_DOWN){ 
         ys = 1; 
        } 
       } 

       @Override 
       public void keyReleased(KeyEvent e) { 
       } 

      }); 
      Win.setResizable(false); 
      Win.setSize(900, 600); 
      Win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      Win.setVisible(true); 
      while (true) { 
       shift(); 
       Win.repaint(); 
       try { 
        Thread.sleep(10); 
       } catch (InterruptedException e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
} 
0

乾杯、 マット

コード

addKeyListener(new KeyListener(){ 

    ...//all the methods. 

}); 

代わりにない場合、あなたは、KeyAdpaterを使用することができますすべてのメソッドを使用しないでください。

addKeyListener(new KeyAdapter(){ 

    ...//Only the methods you want. 

}); 
関連する問題