Hallo Ich möchte eine andere Geschichte zu einem Haus malen in PaintComponent durch Klicken auf die Pfeiltaste nach oben und entfernen Sie es durch Klicken auf die Pfeiltaste. Aber ich habe Probleme mit dem KeyListener und ich verstehe nicht, was an diesem Code behoben werden muss.Wie ändert man Farbe durch KeyListener?
importieren javax.swing.JComponent; importieren Sie javax.swing.JFrame;
Haupt-Viewer-Klasse
public class HouseViewer {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(700, 700);
frame.setTitle("Cool house program");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent component = new HouseComponent();
frame.add(component);
frame.setVisible(true);
}
}
Komponentenklasse
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import javax.swing.JComponent;
import java.awt.event.KeyListener;
public class HouseComponent extends JComponent implements KeyListener {
private boolean more;
private boolean less;
private boolean def;
public HouseComponent(){
def = true;
this.addKeyListener(this);
}
public void paintComponent(Graphics g){
if (def) {
// Default
// 1st rectangle
g.drawRect(230, 180, 200, 200);
// roof
g.drawLine(230, 180, 330, 100);
g.drawLine(430, 180, 330, 100);
// door and window
g.drawRect(260, 280, 50, 100);
g.drawRect(350, 310, 45, 45);
}
if(more) {
// roof
g.drawLine(230, 180, 330, 45);
g.drawLine(430, 180, 330, 45);
// 2nd story rectangle
g.drawRect(230, 180, 200, 100);
// 1st rectangle
g.drawRect(230, 180 + 100, 200, 200);
// door and window
g.drawRect(260, 280 + 100, 50, 100);
g.drawRect(350, 310 + 100, 45, 45);
}
if (less) {
// 1st rectangle
g.drawRect(230, 180, 200, 200);
// roof
g.drawLine(230, 180, 330, 100);
g.drawLine(430, 180, 330, 100);
// door and window
g.drawRect(260, 280, 50, 100);
g.drawRect(350, 310, 45, 45);
}
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key)
{
case KeyEvent.VK_UP:
more = true;
less = false;
def = false;
repaint();
case KeyEvent.VK_DOWN:
more = false;
less = true;
repaint();
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}
Was ist das Problem? –
Ich weiß nicht, wie Schlüsselereignisse die Hausmalerei ändern – Darknax
Fügen Sie ein 'break;' am Ende jedes 'case' hinzu. Siehe https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – Berger