我想制作一种数字时钟,你可以通过使用输入刷新时钟显示来激活,为此我使用这种方法:
private static void GUI(String time, int action){
JLabel textLabel = new JLabel(time);
JPanel panel = new JPanel();
JFrame enterMessage = new JFrame("Tester");
if (action == 1){
enterMessage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
enterMessage.setSize(190, 80);
enterMessage.setVisible(true);
panel.setBackground(Color.WHITE);
panel.add(textLabel);
enterMessage.add(panel);
}else {
System.out.printf("Refresh");
panel.revalidate();
enterMessage.revalidate();
panel.repaint();
enterMessage.repaint();
}
}
}
此方法在程序代码中被调用两次:一次在打开程序时创建GUI,每次检测到enterpress以刷新它。我在互联网上搜索了如何刷新JPanel
,我发现您需要使用revalidate();
然后repaint();
,但它不会刷新面板显示的时间。我该怎么刷新它?
ps:时间从main传递为字符串,每次检测到enterpress都会被覆盖并传递
答案 0 :(得分:2)
遵循Java命名约定。变量名称不应以大写字符开头。
请勿继续在面板上添加标签。只需使用JLabel的setText(...)方法来更改正在显示的文本。
编辑:
SSCCE
的一个示例,向您展示如何使用setText(...)
方法:
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;
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() );
}
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();
}
});
}
}