Java:如何使滚动条以恒定速度滚动?

时间:2013-01-05 20:08:01

标签: java swing animation timer jscrollbar

我想制作一个java GUI程序。它包含一个包含大jPanel的jScrollpane。 jPanel它自己包含许多Swing组件,如jButtons,jPanels和....我想要的是当用户点击jButton时,jScrollpane开始以恒定的速度滚动到大面板的末尾。类似Android OS的东西。 据我所知,我必须知道如何使用java来制作动画来解决这个问题,我试图用Threads解决这个问题,但这是不可能的,似乎swing需要更具体的线程使用... 你能把你的想法告诉我吗?它与Swingworker有关吗? 非常关键... :(

更新:我尝试用计时器类来解决这个问题:

       ActionListener action = new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            if (mainContainerScrollPane.getHorizontalScrollBar().getValue() == mainContainerScrollPane.getHorizontalScrollBar().getMaximum())
                timer.stop();
            mainContainerScrollPane.getHorizontalScrollBar().setValue(mainContainerScrollPane.getHorizontalScrollBar().getValue() + 5);
            mainContainerScrollPane.repaint();
        }
    };

    timer = new Timer(10, action);
    timer.start();

现在的问题是动画制作不顺利。我的意思是它顺利滚动但当它到达一个特定的地方它的速度下降。为什么呢?

1 个答案:

答案 0 :(得分:3)

一般来说,任何更改GUI组件的事件都应该在事件派发线程(EDT)上运行。您可以使用摆动Timer来触发EDT上的重复事件,如本教程中所述。 http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html。在计时器事件中,您可以将滚动条的值增加到新位置应该是什么。以相同的增量重复此操作以获得您正在寻找的效果。