2016-05-22 23 views
2

Das ist mein Code. Ich möchte, dass der Schlüssel-Listener ein Rechteck erstellt, wenn ich eine Taste drücke. Ich habe Probleme, die Füllrechteckmethode in den Schlüsselhörer zu implementieren.Wie bekomme ich meinen Key-Listener, um ein Rechteck zu erstellen?

Ich habe versucht, den Schlüssel Listener zu trennen, aber dann weiß ich nicht, wie Sie sie miteinander verbinden, um die JPanel-Methoden zu verwenden.

import javax.swing.*; 
import java.awt.*; 

public class Keyboard 
{ 
    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame("Keyboard"); 
     frame.setLayout(new BorderLayout()); 
     MyPanel displayPanel = new MyPanel(); 
     frame.add(displayPanel, BorderLayout.CENTER); 

     frame.addKeyListener(displayPanel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width, java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height); 
     frame.setVisible(true); 
    } 
} 

MyPanel Klasse

import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 
import javax.swing.JComponent; 

import javax.swing.JPanel; 

public class MyPanel extends JPanel implements KeyListener { 
    private boolean one; 
    private boolean two; 
    private boolean three; 
    private boolean four; 
    private boolean five; 
    private boolean six; 
    private boolean seven; 
    private boolean eight; 
    private boolean nine; 
    private boolean zero; 
    private boolean dash; 

    public MyPanel() { 
     one = false; 
     two = false; 
     three = false; 
     four = false; 
     five = false; 
     six = false; 
     seven = false; 
     eight = false; 
     nine = false; 
     zero = false; 
     dash = false; 

    } 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     setBackground(new Color(51, 25, 0)); 

     for(int i=0; i<11; i++) 
     { 
      if(i%2 == 0) 
      { 
       g.setColor(Color.WHITE); 
       g.fillRect(i*(java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width/11), 450, 212, 1000); 
      } 
      else 
      { 
       g.setColor(Color.BLACK); 
       g.fillRect(i*(java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width/11), 450, 174, 1000); 
      } 
      if(one==true) 
      { 
       g.setColor(Color.BLUE); 
       g.fillRect(50,50,50,50); 
       repaint(); 
      } 
     } 
    } 
    public void keyPressed(KeyEvent e) 
    { 
     if(e.getKeyCode() ==KeyEvent.VK_1 && !one) 
     { 
      System.out.println("asdasda"); 
      one = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_2 && !two) 
     { 
      two = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_3 && !three) 
     { 
      three = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_4 && !four) 
     { 
      four = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_5 && !five) 
     { 
      five = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_6 && !six) 
     { 
      six = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_7 && !seven) 
     { 
      seven = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_8 && !eight) 
     { 
      eight = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_9 && !nine) 
     { 
      nine = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_0 && !zero) 
     { 
      zero = true; 
     } 
     else if(e.getKeyCode() == 189 && !dash) 
     { 
      dash = true; 
     } 
    } 
    public void keyReleased(KeyEvent e) 
    { 
     if(e.getKeyCode() ==KeyEvent.VK_1) 
     { 
      one = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_2) 
     { 
      two = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_3) 
     { 
      three = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_4) 
     { 
      four = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_5) 
     { 
      five = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_6) 
     { 
      six = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_7) 
     { 
      seven = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_8) 
     { 
      eight = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_9) 
     { 
      nine = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_0) 
     { 
      zero = false; 
     } 
     else if(e.getKeyCode() == 189) 
     { 
      dash = false; 
     } 
    } 
    public void keyTyped(KeyEvent e) 
    { 
     System.out.println("Typed: " + e.getKeyChar()); 
    } 
} 
+1

[Verwenden von Tastenkombinationen] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) – MadProgrammer

Antwort

0

hatte ich ein ähnliches Problem vor einer Weile, ich es fest durch eine kleine Rechteck-Klasse wie diese

package notDeafult; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Rectangle; 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
/** 
* 
* 
*/ 
public class rectangle { 
//The basic outline of a rectangle making up the grid 

    Rectangle rect; 
    int width; 
    int height; 

    public rectangle() { 
    } 

    public rectangle(int x, int y) { 

     this.width = 80; //Setting the size 
     this.height = 80; 
     this.rect = new Rectangle(x + 80, y + 30, width, height);//Moving the object to the centre 
    } 

    public void draw(Graphics g) { 
     g.setColor(Color.green); 
     //.drawRect only draws the outline 
     g.drawRect(rect.x, rect.y, width, height); 

    } 

} 

dann erstellen, wenn Sie bereit sind, einfach Rufen Sie eine Lackiermethode unter einem neuen Jpanel, wie folgt an:

jPanel3 = new javax.swing.JPanel(){ 
    public void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       rectangle rect = new rectangle(width, height); 
       rect.draw(g) 



} 

Und dann könnte man einfach dem paintcomponent seine eigene Methode Namen geben wie paintRectangles oder etwas

und es hier nennen, wenn Sie Ihren Tastendruck

else if(e.getKeyCode() ==KeyEvent.VK_5){ 
      paintRectangles(); 
} 

so etwas bekommen soll funktionieren, denke ich.

0

Ich habe in Ihrer Klasse einige Änderungen:

  • nicht alle Booleschen Variablen auf false init benötigt wird, sind diejenigen, seine Werte noch
  • erstellt eine paintRectangle Methode
  • Eclipse-Code-Formatierung (ich glaube, ist klar)

public class MyPanel extends JPanel implements KeyListener { 

    private boolean one, two, three, four, five, six, seven, eight, nine, zero, dash; 

    public MyPanel() { 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     setBackground(new Color(51, 25, 0)); 

     for (int i = 0; i < 11; i++) { 
      if (i % 2 == 0) { 
       g.setColor(Color.WHITE); 
       g.fillRect(
         i * (java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width 
           /11), 
         450, 212, 1000); 
      } else { 
       g.setColor(Color.BLACK); 
       g.fillRect(
         i * (java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width 
           /11), 
         450, 174, 1000); 
      } 

     } 

     paintRectangle(g); 
    } 

    private void paintRectangle(Graphics g) { 
     if (one) { 
      g.setColor(Color.BLUE); 
      g.fillRect(50, 50, 50, 50); 
     } else if (two) { 
      g.setColor(Color.CYAN); 
      g.fillRect(50, 50, 50, 50); 
     } 
    } 

    public void keyPressed(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_1 && !one) { 
      System.out.println("asdasda"); 
      one = true; 
      repaint(); 
     } else if (e.getKeyCode() == KeyEvent.VK_2 && !two) { 
      two = true; 
      repaint(); 
     } else if (e.getKeyCode() == KeyEvent.VK_3 && !three) { 
      three = true; 
     } else if (e.getKeyCode() == KeyEvent.VK_4 && !four) { 
      four = true; 
     } else if (e.getKeyCode() == KeyEvent.VK_5 && !five) { 
      five = true; 
     } else if (e.getKeyCode() == KeyEvent.VK_6 && !six) { 
      six = true; 
     } else if (e.getKeyCode() == KeyEvent.VK_7 && !seven) { 
      seven = true; 
     } else if (e.getKeyCode() == KeyEvent.VK_8 && !eight) { 
      eight = true; 
     } else if (e.getKeyCode() == KeyEvent.VK_9 && !nine) { 
      nine = true; 
     } else if (e.getKeyCode() == KeyEvent.VK_0 && !zero) { 
      zero = true; 
     } else if (e.getKeyCode() == 189 && !dash) { 
      dash = true; 
     } 
    } 

    public void keyReleased(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_1) { 
      one = false; 
     } else if (e.getKeyCode() == KeyEvent.VK_2) { 
      two = false; 
     } else if (e.getKeyCode() == KeyEvent.VK_3) { 
      three = false; 
     } else if (e.getKeyCode() == KeyEvent.VK_4) { 
      four = false; 
     } else if (e.getKeyCode() == KeyEvent.VK_5) { 
      five = false; 
     } else if (e.getKeyCode() == KeyEvent.VK_6) { 
      six = false; 
     } else if (e.getKeyCode() == KeyEvent.VK_7) { 
      seven = false; 
     } else if (e.getKeyCode() == KeyEvent.VK_8) { 
      eight = false; 
     } else if (e.getKeyCode() == KeyEvent.VK_9) { 
      nine = false; 
     } else if (e.getKeyCode() == KeyEvent.VK_0) { 
      zero = false; 
     } else if (e.getKeyCode() == 189) { 
      dash = false; 
     } 
    } 

    public void keyTyped(KeyEvent e) { 
     System.out.println("Typed: " + e.getKeyChar()); 
    } 
} 
0

Ich habe das Problem herausgefunden. Hier ist der Code für Ihr Problem.

import javax.swing.*; 
import java.awt.*; 

    public class Keyboard 
    { 
     public static void main(String[] args) 
     { 
      JFrame frame = new JFrame("Keyboard"); 
      frame.setLayout(new BorderLayout()); 
      MyPanel displayPanel = new MyPanel(); 
      frame.add(displayPanel, BorderLayout.CENTER); 

      frame.addKeyListener(displayPanel); 

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setSize(java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width, java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height); 
      frame.setVisible(true); 
     } 
    } 

Hier ist MyPanel Klasse

import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.image.ImageObserver; 
import java.text.AttributedCharacterIterator; 
import javax.swing.JComponent; 

import javax.swing.JPanel; 

public class MyPanel extends JPanel implements KeyListener { 
    private boolean one; 
    private boolean two; 
    private boolean three; 
    private boolean four; 
    private boolean five; 
    private boolean six; 
    private boolean seven; 
    private boolean eight; 
    private boolean nine; 
    private boolean zero; 
    private boolean dash; 
    Graphics g; 

    public MyPanel() { 
     one = false; 
     two = false; 
     three = false; 
     four = false; 
     five = false; 
     six = false; 
     seven = false; 
     eight = false; 
     nine = false; 
     zero = false; 
     dash = false; 

    } 
    @Override 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     setBackground(new Color(51, 25, 0)); 

     for(int i=0; i<11; i++) 
     { 
      if(i%2 == 0) 
      { 
       g.setColor(Color.WHITE); 
       g.fillRect(i*(java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width/11), 450, 212, 1000); 

      } 
      else 
      { 
       g.setColor(Color.BLACK); 
       g.fillRect(i*(java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width/11), 450, 174, 1000); 
      } 
      if(one==true) 
      { 

       g.setColor(Color.BLUE); 
       g.drawRect(50, 50, 50, 50); 
       g.fillRect(50,50,50,50); 
       repaint(); 

      } 

     } 
    } 
    @Override 
    public void keyPressed(KeyEvent e) 
    { 
     if(e.getKeyCode() ==KeyEvent.VK_1) 
     { 

       one = true; 
       repaint(); 
      System.out.println("asdasda"); 


     } 
     else if(e.getKeyCode() ==KeyEvent.VK_2 && !two) 
     { 
      two = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_3 && !three) 
     { 
      three = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_4 && !four) 
     { 
      four = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_5 && !five) 
     { 
      five = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_6 && !six) 
     { 
      six = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_7 && !seven) 
     { 
      seven = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_8 && !eight) 
     { 
      eight = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_9 && !nine) 
     { 
      nine = true; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_0 && !zero) 
     { 
      zero = true; 
     } 
     else if(e.getKeyCode() == 189 && !dash) 
     { 
      dash = true; 
     } 
    } 
    public void keyReleased(KeyEvent e) 
    { 
     if(e.getKeyCode() ==KeyEvent.VK_1) 
     { 
      one = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_2) 
     { 
      two = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_3) 
     { 
      three = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_4) 
     { 
      four = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_5) 
     { 
      five = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_6) 
     { 
      six = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_7) 
     { 
      seven = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_8) 
     { 
      eight = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_9) 
     { 
      nine = false; 
     } 
     else if(e.getKeyCode() ==KeyEvent.VK_0) 
     { 
      zero = false; 
     } 
     else if(e.getKeyCode() == 189) 
     { 
      dash = false; 
     } 
    } 
    public void keyTyped(KeyEvent e) 
    { 
     System.out.println("Typed: " + e.getKeyChar()); 
    } 
} 

Der Grund Code nicht funktioniert ist, dass Sie nicht repaint() Verfahren nach der Einstellung hat Aufruf ein = true;. Jetzt funktioniert dein Code. Überprüfen Sie und lassen Sie mich wissen, wenn es irgendeine Verwirrung gibt.

Hinweis: Dies funktioniert nur für Taste 1. Jetzt für andere Tasten ähnlich.