gpt4 book ai didi

java - JPanel 不重绘

转载 作者:行者123 更新时间:2023-12-04 11:21:25 25 4
gpt4 key购买 nike

我正在使用多个 BufferedImages。我正在使用的 JPanel 的绘制功能在 JPanel 上绘制 currentImg:

@Override
public void paint(Graphics g) {
g.drawImage(currentImg, 0, 0, null);
}

currentImg 是为了让我可以轻松切换图像,它在开始时等于 normalImg。redImg 是一个 BufferedImage,看起来与 normalImg 不同。现在我想绘制 redImg 半秒钟,然后再绘制 normalImg。

currentImg = redImg;
repaint();
Thread.sleep(1000);
currentImg = normalImg;
repaint();

但是这段代码什么都不做,JPanel 没有被重新绘制。这段代码虽然有效:

currentImg = redImg;
repaint();
JOptionPane.showMessageDialog(this,"test");
Thread.sleep(1000);
JOptionPane.showMessageDialog(this,"test");
currentImg = normalImg;
repaint();

但我不想显示消息对话框只是为了正确地重新绘制它。感谢您的帮助:)

最佳答案

  1. 避免覆盖paint,尤其是顶级容器,使用基于JComponent 的组件并覆盖它们的paintComponent 方法。看看Painting in AWT and SwingPerforming Custom Painting有关在 Swing 中喘息的更多详细信息
  2. 总是调用super.paintXxx您覆盖的任何绘制方法
  3. 不要在事件调度线程的上下文中使用 Thread.sleep,这将阻止它处理来自 EventQueue 的新事件,包括重绘事件。
  4. 不要从事件调度线程的上下文之外修改 UI。

看看Concurrency in Swing更多详情和How to use Swing Timers寻求可能的解决方案

还有一个 example

关于java - JPanel 不重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29462886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com