Java 使用JLabel在面板中显示计时器
所以我和一位同学一起做了一个程序,我们对GUI没有太多经验,但我想做的是在一个侧面板上显示一个计时器,显示用户完成一个拼图需要多长时间(有一个主游戏区,旁边有一个带按钮的侧面板等等)但我不确定如何让Java 使用JLabel在面板中显示计时器,java,eclipse,timer,jpanel,jlabel,Java,Eclipse,Timer,Jpanel,Jlabel,所以我和一位同学一起做了一个程序,我们对GUI没有太多经验,但我想做的是在一个侧面板上显示一个计时器,显示用户完成一个拼图需要多长时间(有一个主游戏区,旁边有一个带按钮的侧面板等等)但我不确定如何让JLabel随着用户解决难题所花的时间不断更新。 我不知道如何使用timer对象来实现这一点,所以我现在只尝试使用System.nanoTime() 1) 如果我使用的是计时器对象,那么在Action listener参数中使用什么?这将调用timerLabel.updateUI()
JLabel
随着用户解决难题所花的时间不断更新。
我不知道如何使用timer对象来实现这一点,所以我现在只尝试使用System.nanoTime()
1) 如果我使用的是计时器对象,那么在Action listener参数中使用什么?这将调用timerLabel.updateUI()每次(假设我有actionPerformed方法,其中已经有那行代码)?使用计时器对象创建Jlabel参数时,我需要在其中输入什么
2) 如果不使用timer对象,那么持续更新时间的最佳方法是什么
//Timer timer = new Timer(1000, new ActionListener(??));
//timer.start();
long start = System.nanoTime();
String time = new java.text.SimpleDateFormat("ms").format(new java.util.Date(start/1000000));
timerlabel = new JLabel(time);
sideMenu.add(timerlabel);
timerlabel.updateUI();
您似乎不了解如何使用ActionListener
ActionListener
不接受任何参数,因为它是一个接口;相反,您重写了它的actionPerformed
方法。您可能正在寻找的是:
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent ev) {
// Whatever action you want to happen every 1000 milliseconds
timerLabel.setText(new java.text.SimpleDateFormat("ms")
.format(new java.util.Date(System.nanoTime()/1000000)));
}
});
timer.start();
有关更多详细信息或一个非常好的示例,请参阅。在.updateText行中,它说它是类型JLabel的一个未定义方法,JLabel中是否有任何方法可以像这样更新自身?Its.setText,所以现在我排除了这个错误,它实际上似乎从未更新过,它不是应该每1000毫秒改变一次吗?我的系统。纳米时间超出了actionPefromed方法,解决了它,谢谢你的帮助@ShadowBlade对不起,我的意思是setText
,而不是updateText
。我会编辑的。如果这个答案对你有用,请接受它!顺便说一句,很高兴我能帮助你。:)