Java 如何实现睡眠以显示图像的幻灯片

Java 如何实现睡眠以显示图像的幻灯片,java,swing,sleep,Java,Swing,Sleep,我在JavaSwing中使用JWindows显示图像。。。我制作了不同的jLabel,其中包含我想要显示的图像。。我正在删除以前添加的组件,并添加要在同一窗口中显示的新组件。。问题如下 getContentPane().remove(startLabel); getContentPane().add(recordLabel1, "Center"); setVisible(true); try {

我在JavaSwing中使用JWindows显示图像。。。我制作了不同的jLabel,其中包含我想要显示的图像。。我正在删除以前添加的组件,并添加要在同一窗口中显示的新组件。。问题如下

            getContentPane().remove(startLabel);
            getContentPane().add(recordLabel1, "Center");
            setVisible(true);
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel1);
                getContentPane().add(recordLabel2, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel2);
                getContentPane().add(recordLabel3, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel3);
                getContentPane().add(recordLabel4, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel4);
                getContentPane().add(pausedLabel, "Center");
                setVisible(false);  
该代码在没有睡眠功能的情况下工作正常。事件完成后,我可以在不同窗口或相同窗口上显示所有图像。。然而,当我使用睡眠时,在这段时间里什么都不会显示

            getContentPane().remove(startLabel);
            getContentPane().add(recordLabel1, "Center");
            setVisible(true);
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel1);
                getContentPane().add(recordLabel2, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel2);
                getContentPane().add(recordLabel3, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel3);
                getContentPane().add(recordLabel4, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel4);
                getContentPane().add(pausedLabel, "Center");
                setVisible(false);  
有没有办法实现像幻灯片一样的图像延迟,并在延迟之前绘制图像

            getContentPane().remove(startLabel);
            getContentPane().add(recordLabel1, "Center");
            setVisible(true);
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel1);
                getContentPane().add(recordLabel2, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel2);
                getContentPane().add(recordLabel3, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel3);
                getContentPane().add(recordLabel4, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel4);
                getContentPane().add(pausedLabel, "Center");
                setVisible(false);  

这是一个使用的好时机

            getContentPane().remove(startLabel);
            getContentPane().add(recordLabel1, "Center");
            setVisible(true);
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel1);
                getContentPane().add(recordLabel2, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel2);
                getContentPane().add(recordLabel3, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel3);
                getContentPane().add(recordLabel4, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel4);
                getContentPane().add(pausedLabel, "Center");
                setVisible(false);  
你应该:

            getContentPane().remove(startLabel);
            getContentPane().add(recordLabel1, "Center");
            setVisible(true);
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel1);
                getContentPane().add(recordLabel2, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel2);
                getContentPane().add(recordLabel3, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel3);
                getContentPane().add(recordLabel4, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel4);
                getContentPane().add(pausedLabel, "Center");
                setVisible(false);  
  • 将标签/图片存储在数组中,而不是存储在不同的变量中
  • 按照上述教程中的说明设置计时器
  • 在计时器事件中,只需旋转标签数组

您只需要在类中添加一个成员来存储当前显示的图片编号。当计时器启动时,使用该成员从窗格中删除当前项,增加它(按您拥有的元素总数计算),然后插入新项。

Edit:我尝试在固定的JLabel上更改图像,而不是添加和删除组件。。。没用!编辑:我还尝试切换许多不同的重叠窗口,其中包含可见和不可见的不同图像。。。没用!下面的答案无法解释为什么什么都没有发生。这是因为您的代码在Swing事件线程中运行,当您睡眠时,暂停该线程。不过,更新和显示Swing组件需要线程,所以在它处于休眠状态时不会发生任何事情。我认为您应该阅读本文以了解Swing的事件处理和线程基本上是如何工作的。
javax.Swing.Timer的+1;另见。
            getContentPane().remove(startLabel);
            getContentPane().add(recordLabel1, "Center");
            setVisible(true);
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel1);
                getContentPane().add(recordLabel2, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel2);
                getContentPane().add(recordLabel3, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel3);
                getContentPane().add(recordLabel4, "Center");
            try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                getContentPane().remove(recordLabel4);
                getContentPane().add(pausedLabel, "Center");
                setVisible(false);