在几秒钟后自动更改jSlider

时间:2015-05-06 05:09:28

标签: java multithreading swing event-dispatch-thread seconds

我有一个Java Swing程序,其中后台程序在更改jSlider时执行。但是jSlider不能通过人工交互来改变,但它会自动减少(jSlider代表液体的浓度水平)。一旦减少,其他程序通过actionListener读取jSlider并提供适当的溶质以满足浓度要求。我无法实现这种情况。我尝试过使用线程,但由于我的知识很少,我可能不会编写正确的代码。

public static void main(String args[])
    {
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new IPS().setVisible(true);

            }
        });

         Thread concentration = new Thread()
        {
            public void run()
            {
                try
                {
                    Thread.sleep(3000);
                } catch (InterruptedException v)
                {

                }
                sldLevel.setValue(sldLevel.getValue() - 3);
            }
        }; 
        boolean carryOn = true;

        while (carryOn && !btnIPSStart.isEnabled())
        {
            concentration.start();
        }
    }

使用Swing Timer进行代码更新

    public static void main(String args[])
        {
            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    new IPS().setVisible(true);

                }
            });

            Timer myTimer = new Timer(100, 1000);
            // I get a error 'int cannot be converted to action listener

            while (myTimer.isRunning)
            {
                sldLevel.setValue(sldLevel.getValue() - 3)
            }

1 个答案:

答案 0 :(得分:1)

您不应该使用Thread,也不应该使用Thread.sleep()。这将导致GUI冻结,并且无法重新绘制自己。

相反,您应该使用Swing Timer。当计时器触发时,您可以更新滑块的值。