Jlabel显示新旧数字

我的Jlabel不仅展示了现在(tNow – tStart)%10000,而且展示了过去的所有内容,我该如何解决?

import javax.swing。 ; import java.awt。 ;

公共类Main {

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); 

不要继续向框架添加组件。 摆脱那种说法。

相反,您需要更新框架上的现有标签:

所以你需要做一些改变:

  1. 创建JLabel并将其添加到main()方法中的框架。

  2. 然后需要更改addTime(...)方法以将标签传递给帧的方法intead。 然后,您可以使用标签的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(); } }); } } 

我建议您更新代码以使用类似的代码而不是当前的代码。

您正在创建一个新的JLabel ,并在每次add_time并将时间条件满足时将其添加到帧中。 这意味着你最终出现了JLabel的出现[已删除:彼此相邻,就好像附加了新的时间值一样。 例如JLabel1 + JLabel2 + JLabel3]在旧值之上。

您应该声明一次label变量,然后更新其文本值,而不是在add_time使用new JLabel