2017-05-08 1 views
0
public class Maze extends JPanel 
{ 

    int x = 0; 
    int y = 0; 
    int previousX = x; 
    int previousY = y; 

    public Maze() 
    { 
     setBackground(Color.WHITE); 

     addKeyListener(new ArrowListener()); 
     setPreferredSize(new Dimension(200, 200)); 
     setFocusable(true); 
     requestFocusInWindow(); 
    } 

    public void paintComponent(Graphics page) 
    { 
     super.paintComponent(page); 
     page.setColor(Color.WHITE); 
     page.fillRect(previousX, previousY, 10, 10); 
     page.setColor(Color.magenta); 
     page.fillRect(x, y, 10, 10); 

    } 

    private class ArrowListener implements KeyListener 
    { 

     public void keyPressed(KeyEvent event) 
     { 
      System.out.println("pressed"); 
      previousX = x; 
      previousY = y; 

      switch(event.getKeyCode()) 
      { 

      case KeyEvent.VK_W: 
       if(y >= 0) 
        y--; 
       System.out.println("up"); 
       break; 

      case KeyEvent.VK_S: 
       if(y <= 100) 
        y++; 
       System.out.println("Down"); 
       break; 

      case KeyEvent.VK_A: 
       if(x >= 0) 
        x--; 
       System.out.println("Left"); 
       break; 

      case KeyEvent.VK_D: 
       if(x <= 100) 
        x++; 
       System.out.println("Right"); 


      } 
      repaint(); 
     } 

     public void keyReleased(KeyEvent event){} 

     public void keyTyped(KeyEvent event){} 

    } 
} 

Die Println Zeilen werden überhaupt nicht gedruckt, was darauf hindeutet, dass es nicht einmal in die keyPressed Methode geht. Was mache ich falsch? Alles was es tun soll, ist eine rect um den Bildschirm zu bewegen.Was ist falsch an meinem Key Listener? Es geht überhaupt nicht in die Taste

+0

schauen Sie auf Java-Konsole? –

+2

Es funktioniert für mich. Bearbeiten Sie Ihre Frage und zeigen Sie den Code, den Sie geschrieben haben, der ein "Maze" zu einem Fenster oder Applet hinzufügt. – VGR

+0

Etwas anderes könnte den Fokus stehlen, vielleicht ein JButton oder eine Textkomponente wie ein JTextField. Dies ist ein Grund, Keylistener zu vermeiden und stattdessen Key Bindings zu verwenden. –

Antwort

2
import javax.swing.JFrame; 

public class Main { 

    static Maze m = new Maze(); 
    static JFrame frame = new JFrame(); 

    public static void main(String[] args) { 
     frame.setSize(300, 300); 
     frame.add(m); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

} 

Ich schrieb diese Hauptklasse schnell und testete Ihren Code. Es hat für mich funktioniert.

+1

setSize() und pack() sich gegenseitig ausschließen. Brauche nur das eine oder das andere. – Michael