java - 使用 Java 的 JComponent repaint()

标签 java swing repaint jcomponent

我正在用 Java 编写一个简单的生命游戏程序,但在制作动画时遇到了一些麻烦。我有一个名为 LifeDrawJComponent 类,它使用以下绘制方法显示像素网格:

protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    for (int y = 0; y < lGrid.getHeight(); y++) {
        for (int x = 0; x < lGrid.getWidth(); x++) {
            if (lGrid.getCell(x,y) == 1) {
                g.setColor(Color.red);
                g.fillRect(x * lGrid.getSqSize(), y * lGrid.getSqSize(), lGrid.getSqSize(), lGrid.getSqSize());
            } else {
                g.setColor(Color.white);
                g.fillRect(x * lGrid.getSqSize(), y * lGrid.getSqSize(), lGrid.getSqSize(), lGrid.getSqSize());
            }
        }
    }
}

然后是另一个类 LifeGrid,它有一个方法 run(),当调用该方法时将更新一代的像素网格,然后调用 LifeDraw。重绘()。但是,如果我尝试在循环中调用 run()JComponent 在循环完成之前不会重新绘制,因此显示的只是第一代和最后一个。我认为它可能只是更新得太快而无法重新绘制,所以我尝试在迭代之间使用 Thread.sleep() 但仍然遇到同样的问题。理论上(或者至少我希望如此),它应该在每次迭代之间重新绘制组件并显示像素变化的动画。

我不太精通 Java GUI,因此非常感谢任何帮助。希望我已经解释清楚了,否则请告诉我!

最佳答案

我不知道它是否能解决您的问题,但您可以尝试从 Timer 调用 run()而不是简单的 for 或 while 循环。

关于java - 使用 Java 的 JComponent repaint(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2015795/

相关文章:

java - ODM 8.8 如何在BAL中的数组中添加元素

java - 使用鼠标编辑形状位置

java - 使用 JButton 从 JList 中删除项目,但不会刷新

java - 如何在不使用新 JFrame 的情况下更改 JPanel 中的图像(Repaint() 不起作用!)

java - kmeans聚类算法中的多维ArrayList

java - Maven 将 JRE 而不是 JDK 添加到 Eclipse 中的构建路径

java - 从堆栈写入文件

java - 根据 Jtextfield 输入从 Jtable 中选择一行

java - 如何修复 Java 错误 : myClass is not abstract and does not override abstract method?

java - 无法让 JFrame 简单的类似绘画的程序与键绑定(bind)一起使用