你好,我希望通過單擊向上箭頭鍵將另一個故事添加到繪製在paintComponent中的房子,並通過單擊向下箭頭鍵將其刪除。但我有關於KeyListener的問題,我不明白這個代碼需要修正什麼。如何通過KeyListener更改塗料?
import javax.swing.JComponent; import javax.swing.JFrame;
主瀏覽器類
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);
}
}
組件類
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) {
}
}
問題是什麼? –
我不知道如何讓關鍵事件改變房屋繪畫 – Darknax
在每個「case」的末尾添加一個「break」。請參閱https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – Berger