一旦你有了一个 JFrame,你需要给它添加一个 JPanel,并将你的渲染代码放在 JPanel 的 repaint() 方法中。
我建议您查看this 示例,了解如何正确使用 JFrame。
public class MyJFrame extends JFrame implements KeyListener {
private MyJPanel frame;
public MyJFrame() {
super();
frame = new MyJPanel();
add(frame);
pack();
addKeyListener(this);
repaint();
}
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
window.setTitle("Test");
}
@Override
public void repaint() {
super.repaint();
}
@Override
public void keyPressed(KeyEvent e) {
frame.keyPressed(e);
repaint();
}
@Override
public void keyTyped(KeyEvent e) { }
@Override
public void keyReleased(KeyEvent e) { }
}
这是MyJPanel 类:
public class MyJPanel extends JPanel {
private int x = 0;
private int y = 0;
public MyJPanel() {
setPreferredSize(new Dimension(200,200));
}
@Override
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawRect(x,y,1,1);
}
public void keyPressed(KeyEvent e) {
int k = e.getKeyCode();
switch (k) {
case KeyEvent.VK_D:
x++;
break;
case KeyEvent.VK_A:
x--;
break;
case KeyEvent.VK_W:
y--;
break;
case KeyEvent.VK_S:
y++;
break;
}
}
}
使用KeyListener 是可选的,但允许您获取键盘输入。
我知道这很长而且不是很直接,但我希望你能从这段代码中学到一些东西。如果您还有其他问题,请随时发表评论,我会尽我所能为您提供帮助。
MyJFrame 需要导入:
java.awt.event.KeyEvent;
java.awt.event.KeyListener;
javax.swing.JFrame;
MyJPanel 需要导入:
java.awt.Color;
java.awt.Dimension;
java.awt.Graphics;
java.awt.event.KeyEvent;
javax.swing.JPanel;