循环中的javax.swing.JFrame setText()?故意拖延?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了循环中的javax.swing.JFrame setText()?故意拖延?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1850字,纯文字阅读大概需要3分钟。
内容图文
![循环中的javax.swing.JFrame setText()?故意拖延?](/upload/InfoBanner/zyjiaocheng/748/ef2d732c5dcb40c8825e37c072076d50.jpg)
我是Java的新手(仅使用它大约一周),我正在商店模拟器上工作.基本上我只是希望现在能够完成基本的事情,比如有一段时间直到关闭以及屏幕上显示开启变量的时间.
我在我的Simulation扩展javax.swing.JFrame类中做了以下函数:
public void incOpenTime() {
timeOpen++;
int hours = timeOpen / 3600;
int minutes = (timeOpen % 3600) / 60;
int seconds = (timeOpen % 3600) % 60;
this.openTime.setText((hours < 10 ? "0" : "") + hours
+ ":" + (minutes < 10 ? "0" : "") + minutes
+ ":" + (seconds < 10 ? "0" : "") + seconds);
decTimeLeft();
}
public void decTimeLeft() {
int remainingTime = 28800 - timeOpen;
int hours = remainingTime / 3600;
int minutes = (remainingTime % 3600) / 60;
int seconds = (remainingTime % 3600) % 60;
this.timeLeft.setText((hours < 10 ? "0" : "") + hours
+ ":" + (minutes < 10 ? "0" : "") + minutes
+ ":" + (seconds < 10 ? "0" : "") + seconds);
}
使用setText()方法的openTime和timeLeft变量是GUI本身的一部分.
在main中,我像这样调用incOpenTime:
while(this.timeOpen < 28800)
{
incOpenTime();
}
首先,当我运行它时,它基本上只是通过循环并仅输出最后一次到屏幕.如何才能让时间不断变化?
其次,我想稍微延迟一下……可能大约每秒1毫秒,因此模拟运行速度较慢,而其他数据输出到屏幕(后面)更具可读性.我试过Thread.sleep(1);在循环中但它不会显示数字,因为它们被更改.
请帮忙.
谢谢
编辑:
这就是我为了让它发挥作用所做的一切.主要:
timer = new Timer();
for(int i=1; i<= 28800; i++)
{
timer.schedule(new task(), 1*i);
}
做了一个新课:
class task extends TimerTask {
@Override
public void run() {
incOpenTime();
}
}
解决方法:
你需要一个java.util.Timer
编辑:由于这是接受的答案,重要的是要注意TimerTask应该在事件派发线程上执行其Runnable.这个approach的正确变化在@ mKorbel的answer中有所记录.下面有一个简短的例子和一个更精细的here.一个稍微简单的方法,由@Hovercraft建议,见于here.
class Task extends TimerTask {
@Override
public void run() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
incOpenTime();
}
});
}
}
内容总结
以上是互联网集市为您收集整理的循环中的javax.swing.JFrame setText()?故意拖延?全部内容,希望文章能够帮你解决循环中的javax.swing.JFrame setText()?故意拖延?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。