我的 Jlabel 不仅显示当前 (tNow - tStart) % 10000,还显示所有过去的,我该如何解决这个问题?
导入 javax.swing.; 导入 java.awt.;
公共(public)类主要{
public static void main(String[] args) {
JFrame frame = new JFrame("FrameDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
//frame.setSize(500, 500);
frame.setUndecorated(true);
frame.getContentPane().setBackground(Color.GREEN);
final long tStart = System.currentTimeMillis();
long tNow = 0;
System.out.println(tStart);
while (1 != 0) {
add_time(tNow, frame);
}
}
public static void add_time(long tStart, JFrame frame) {
long tNow = System.currentTimeMillis();
if ((tNow - tStart) % 10000 >= 5000) {
frame.setVisible(true);
//System.out.println((tNow - tStart) % 10000);
JLabel label = new JLabel("Test", JLabel.CENTER);
label.setText(String.valueOf((tNow - tStart) % 10000));
label.setFont(new Font("Serif", Font.BOLD, 240));
label.setSize(500, 500);
frame.add(label);
//label.setText("");
} else frame.setVisible(false);
}
}
最佳答案
frame.add(label);
不要不断向框架添加组件。删除该声明。
相反,您需要更新框架上的现有标签:
因此您需要进行一些更改:
创建 JLabel 并将其添加到 main() 方法中的框架中。
然后需要更改
addTime(...)
方法,以将标签传递给方法而不是框架。然后你就可以使用标签的setText()方法来更新标签。
实际上这是设计得很糟糕的代码。您不应该对所有代码使用静态方法。以下示例展示了如何更好地构建代码以及如何使用 Timer
更新标签上的文本:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
public class TimerTime extends JPanel implements ActionListener
{
private JLabel timeLabel;
private int count = 0;
public TimerTime()
{
timeLabel = new JLabel( new Date().toString() );
add( timeLabel );
Timer timer = new Timer(1000, this);
timer.setInitialDelay(1);
timer.start();
}
@Override
public void actionPerformed(ActionEvent e)
{
//System.out.println(e.getSource());
timeLabel.setText( new Date().toString() );
// timeLabel.setText( String.valueOf(System.currentTimeMillis() ) );
count++;
if (count == 10)
{
Timer timer = (Timer)e.getSource();
timer.stop();
}
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("TimerTime");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new TimerTime() );
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
我建议您更新代码以使用类似的内容而不是当前的代码。
关于java - Jlabel 显示旧数字和新数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36291429/