[英]paintComponent() doesn't get called
我的paintComponent()
不会被调用。
我用谷歌搜索了一下,还没有找到我可以使用的答案。 起初,我没有frame.getContentPane().add(this)
,并认为答案是插入它,但都没有奏效。 我希望有人可以帮助我。
在这里你有我的代码的一小段:
package engine;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Frame extends JPanel {
private static final long serialVersionUID = 1L;
private JFrame frame = new JFrame();
private GameEngine engine;
private Game game;
public Frame(GameEngine engine) {
this.engine = engine;
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setSize(1920, 1080);
frame.getContentPane().add(this);
}
public void updateGame(Game game) {
this.game = game;
}
public JFrame getFrame() {
return frame;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawString("" + game.getClockDate(), 1920 - 100, 20);
System.out.println("test");
}
}
我从这里调用它,在另一个类中:
public void loop() {
if (this.ingame) {
game.loop();
frame.updateGame(game);
frame.repaint();
}
}
尝试调用 super() 作为构造函数的第一行,以便您的 JPanel 正确初始化。
public Frame(GameEngine engine) {
super();
this.engine = engine;
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setSize(1920, 1080);
frame.getContentPane().add(this);
}
还可以调用 @Override 注释来清除代码。
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawString("" + game.getClockDate(), 1920 - 100, 20);
System.out.println("test");
}
您在游戏循环中调用repaint
,但repaint
并不能保证窗口会被重绘,因此可能不会调用paintComponent
。 您应该改为使用paintImmediately
。
paintImmediately(0, 0, 1920, 1080);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.