Java,JPanel 不显示在 JFrame 中,可能是并发问题?

标签 java swing animation java-2d event-dispatch-thread

我有一个包含 4 个帧的 vector ,它由包含在 JPanel 中的 JButton 的二维数组组成。我正在尝试将它们添加到 JFrame,以便它们在循环时显示动画。

我有一个 add 方法,当我手动递增它时它可以工作,但是当我把它放在 for 循环中时,框架保持空白,就好像它没有被重新绘制一样。终端打印出正确的索引号。

public void addNewFrame() throws InterruptedException {
    for (int i = 0; i < 10; i++) {
        if (index == 3) {
            System.out.println(index);
            remove(model.getFrame(3));
            revalidate();
            repaint();
            index = 0;
            add(model.getFrame(index), BorderLayout.CENTER);
            revalidate();
            repaint();
            Thread.sleep(300);
        } else {
            System.out.println(index);
            remove(model.getFrame(index));
            revalidate();
            repaint();
            index++;
            add(model.getFrame(index), BorderLayout.CENTER);
            revalidate();
            repaint();
            Thread.sleep(300);
        }
    }

这可能是并发问题吗?我是否应该将二维按钮数组添加到在其自己的线程中运行的 JPannel?

最佳答案

they will display an animation when looped.

不要使用 Thread.sleep() 来尝试控制动画。

动画应该使用 Swing Timer 来完成.

此外,每当我看到删除/添加组件的代码时,它几乎总是错误的。相反,您应该使用 CardLayout。上面的教程还有一个关于如何使用 CardLayout 的部分。

关于Java,JPanel 不显示在 JFrame 中,可能是并发问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16091820/

相关文章:

java - Java 中另一个类中未见的已初始化对象

java - JTable 单元格颜色

java - JTextField 焦点未集中在第一次单击 Tab 按钮上

css - 使用 css 对进入中心图形然后环绕中心图形进行动画处理

javascript - js 中的动画有不必要的轻微延迟

java - EventListenerList 相对于 Vector 的优势

java - Jersey 415 不支持的媒体类型

java - 在android中使用onScanResult获取两个BLE设备

java - 如何动态添加新的自定义按钮?

css - 如何绘制svg文件?