我想制作一个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();
现在的问题是动画制作不顺利。我的意思是它顺利滚动但当它到达一个特定的地方它的速度下降。为什么呢?
答案 0 :(得分:3)
一般来说,任何更改GUI组件的事件都应该在事件派发线程(EDT)上运行。您可以使用摆动Timer
来触发EDT上的重复事件,如本教程中所述。 http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html。在计时器事件中,您可以将滚动条的值增加到新位置应该是什么。以相同的增量重复此操作以获得您正在寻找的效果。