我正在用cardLayout更改“视图”(此类有一个JFrame变量)。当用户单击新游戏按钮时,会发生以下情况:
public class Views extends JFrame implements ActionListener {
private JFrame frame;
private CardLayout cl;
private JPanel cards;
private Game game;
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("New game")) {
cl.show(cards, "Game");
game.init();
this.revalidate();
this.repaint();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
game.loop();
}
});
}
}
}
游戏的循环方法和类标题:
public class Game extends JPanel implements KeyListener {
public void loop() {
while (player.isAlive()) {
try {
this.update();
this.repaint();
// first class JFrame variable
jframee.getFrame().repaint();
// first class JFrame variable
jframee.getFrame().revalidate();
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void update() {
System.out.println("updated");
}
}
我在用画 paintComponent()
public void paintComponent(Graphics g) {
System.out.println("paint");
...
}
实际上,它没有画任何东西。当我不调用loop()方法(因此它仅绘制一次)时,所有图像均正确绘制。但是当我调用loop()方法时,窗口中什么也没有发生。(即使关闭按钮JFrame也不起作用。)
如何解决?(当我JFrame在游戏课程中创建游戏时,一切正常,但是现在我想拥有更多视图,因此我需要JFrame在其他课程中使用。)
谢谢。