jlabel闪烁或随机不显示



我在开发一款Java 2d游戏时遇到了问题。

一些游戏屏幕元素是在覆盖paint()方法的Jpanel中绘制的,其他一些元素是Jlabels添加到该面板上的。

问题是paint()方法中绘制的元素始终是最新的(我从线程中每30毫秒回忆一个Jpanel.repaint()),但Jlabels通常不显示或以随机方式闪烁。

我已经搜索了很多,但无法找到一种方法来更新所有的元素在同一时间。

这是代码的核心结构:

主类

final class ATC_sim {

// ...
public CustomLabel[] label; 
// CustomLabel is just a class in which are organized differents JLabels in
// a certain relative position.  
// ...

private ATC_sim(){
initGui();
initGame();
}
private void initGui(){
frame = new JFrame();
pGame = new GamePanel(this);
for(int i=0; i< label.length; i++){
pGame.add(label[i]);
}
frame.add(pGame);
// ...
}
private void initGame(){
loop = new Loop(this, 30);                  
thread = new Thread(loop);
thread.start();

pGame.repaint();
}
// method recalled every 30ms from thread(loop)
public void updateGame(){         
// do the math of the game (in which I also move the position of labels)
// ...
for(int i=0; i< label.length; i++){
label[i].update(); // this method update text in Jlabels and position of label.
}

pGame.repaint();
}
}
<<p>GamePanel类/strong>
public class GamePanel extends JPanel {
// ...
public GamePanel(ATC_sim a) {
this.atc = a;
// ...
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

// do some drawings according to some variable calculated in updateGame()

}
}

首先,如果您想要更好的性能和更低的延迟/口吃机会,请使用paintImmediately()而不是repaint()

这可能已经解决了你的问题。

第二部分是:你使用双缓冲吗?如果你使用这个,这个问题肯定会消失(在我看来)。

相关内容

  • 没有找到相关文章

最新更新