1

我想做一个java GUI程序。它包含一个 jScrollpane,其中包含一个大 jPanel。jPanel 它本身包含许多 Swing 组件,例如 jButtons、jPanels 和...。我想要的是当用户单击 jButton 时,jScrollpane 开始以恒定速度滚动到大面板的末尾。类似安卓操作系统的东西。我知道我必须知道如何用java制作动画来解决这个问题,我试图用线程简单地解决这个问题,但这是不可能的,而且似乎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();

现在的问题是动画没有顺利完成。我的意思是它可以平滑滚动,但是当它到达特定位置时,它的速度会下降。为什么?

4

1 回答 1

3

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

于 2013-01-05T21:01:02.413 回答