我已经在java中创建了一个ProgressBar。我可以使用pb.setValue(i)设置值;我是一个int 我很难设置“我”的值来增加进度条的值,以便在10秒内进度条在10秒内达到1%到100%。我怎样才能做到这一点 ?任何帮助,将不胜感激创建一个对时间有反应的进度条
-1
A
回答
1
您可以使用Timer:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.Timer;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class TimerTest {
public static void main(String[] args) {
final JFrame frame = new JFrame();
final JProgressBar ps = new JProgressBar();
final Timer timer = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int value = ps.getValue() + 1;
ps.setValue(value);
}
});
ps.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (ps.getValue() == 100) {
timer.stop();
frame.dispose();
}
}
});
frame.setSize(600, 400);
frame.add(ps);
frame.pack();
frame.setVisible(true);
timer.start();
}
}
0
调查java标准库有时间特定的功能,如此代码段。
long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();
long duration = endTime - startTime;
您可以设置结束和开始时间,以便根据实现代码的方式设置持续时间或10或1个部分。
+0
'nanoTime'可能有点过分,因为OP想要达到10秒,但这个概念是合理的。 – MadProgrammer 2013-03-06 20:41:24
0
您有多种选择,这里有两个。
您可以建立一个计时器,该计时器每秒钟滴答一次,直到滴答10次,或者您可以计算已经过去的时间量,并根据目标时间过去的时间生成一个进度值,流畅的进展......
public class ProgressOverTime {
public static void main(String[] args) {
new ProgressOverTime();
}
public ProgressOverTime() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
frame.add(new TestPane(), gbc);
frame.add(new TimeGapPane(), gbc);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JProgressBar pb;
private int progress;
private int target = 10;
public TestPane() {
setLayout(new GridBagLayout());
pb = new JProgressBar();
pb.setMaximum(10);
add(pb);
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
progress++;
if (progress > target) {
((Timer)e.getSource()).stop();
}
pb.setValue(progress);
}
});
timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();
}
}
public class TimeGapPane extends JPanel {
private JProgressBar pb;
private long startTime = -1;
private int target = 10000;
public TimeGapPane() {
setLayout(new GridBagLayout());
pb = new JProgressBar();
pb.setMaximum(100);
add(pb);
Timer timer = new Timer(40, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (startTime < 0) {
startTime = System.currentTimeMillis();
}
long now = System.currentTimeMillis();
long ticks = now - startTime;
float progress = (float)ticks/(float)target;
if (progress >= 1f) {
((Timer)e.getSource()).stop();
progress = 1f;
}
pb.setValue(Math.round(100f * progress));
}
});
timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();
}
}
}
相关问题
- 1. 只用时间戳创建进度条?
- 2. 创建进度条
- 3. 创建一个CLI应用程序中的进度条
- 4. 如何创建一个时尚的进度条,并用它
- 5. 创建数据库时的进度条
- 6. 创建实时进度条winform
- 7. 加载UI时创建进度条
- 8. 反应创建一个MixIn
- 9. 试图创建进度条
- 10. 如何创建进度条
- 11. 创建一个进度条 - 刷新一个JDialog
- 12. 进度条耗尽一段时间
- 13. 建立一个不错的进度条
- 14. 进度条与UTC时间
- 15. 未知进程时间的进度条
- 16. 更改一个进度条更改所有进度条
- 17. 进度条HUD反应本机
- 18. 如何创建一个带分节的进度条?
- 19. 用Rails/Jquery创建一个动态更新的进度条?
- 20. 如何创建一个只包含c进度条的表单#
- 21. 创建一个Greeter对象时没有任何反应 - 开始使用Ruby
- 22. Cocos2d-x:创建简单的进度条
- 23. 第一次创建数据库时的进度对话框
- 24. 剪辑路径,如何创建一个圆形进度条?
- 25. 你如何创建一个箭头主题进度条导航?
- 26. 更新一个进度条上有多个进度条的课程
- 27. 在黑莓中创建一个条(如音量条或进度条)
- 28. Excel VBA反向进度条
- 29. jQuery UI反弹进度条
- 30. AVPlayer的时间轴进度条
有没有雅刚刚发布了同样的问题,像20分钟前。 HTTP://stackoverflow.com/questions/15256762/progress-bar-that-takes-10-seconds-to-reach-100 ??。我们再次问你同样的问题,你试过了什么? – PermGenError 2013-03-06 20:19:20
@ user1730355 - 请不要为同一个问题创建* new *问题;相反,编辑您的原始问题以使其更加清晰,并回答针对您的任何评论,然后将其标记为重新打开。 – LittleBobbyTables 2013-03-06 20:28:53
我已经做了i ++的增量,但是它每秒都会做,我试图弄清楚我是否将它作为小数,并将其作为整数进行投射,但仍会得到不准确的读数。 – user1730355 2013-03-06 20:34:31