我正在为模拟创建一个简单的“播放/倒带”界面,其中的 JSlider 既可以用作进度条,也可以用作滑块,您可以将模拟移动到模拟范围内的任何时间点。滑动到时间点效果很好,但是在模拟“播放”时我无法移动实际的滑块。下面显示了指向 GUI 的链接以获得更多帮助:
http://i.stack.imgur.com/7rAWf.png
我正在做的事情的简化版本
主要对象有 2 个对象,GUI 和控制器。gui:创建滑块/按钮和控制器。滑块和按钮的更改/动作侦听器设置为控制器
控制器:执行播放/倒带功能的各种按钮。这是通过使用每“帧”重新绘制模拟的摆动计时器来处理的。使用滑块,当您拖动滑块时,“CurrentFrame”会发生变化,并且会调用重绘函数。它没有做的是在计时器运行时自行滑动。stateChanged 的代码如下:
public void stateChanged(ChangeEvent z)
{
JSlider source = (JSlider)z.getSource();
//If statement that checks if the state of the slider is done changing when the change listener is evoked
if(!source.getValueIsAdjusting())
{
CurrentFrame = (int)source.getValue();
colladaRoot.setPosition(framePos[CurrentFrame]);
wwd.repaint();
}
// My attempt at checking if the timer is running, and changing the value of the slider
// while it is.
while (timer.isRunning())
source.setValue(CurrentFrame);
}
如果需要,这也是在 GUI 类中创建的滑块:
JSlider framecontroller = new JSlider(0, LastFrame, CurrentFrame);
framecontroller.addChangeListener(this.controller);
framecontroller.setMajorTickSpacing(200);
framecontroller.setMinorTickSpacing(1);
framecontroller.setPaintTicks(true);
framecontroller.setPaintLabels(true);