gpt4 book ai didi

java - 如何向 Jpanel 添加系统时间(运行)?

转载 作者:行者123 更新时间:2023-12-02 04:35:24 25 4
gpt4 key购买 nike

我对 java 编码很陌生。所以了解的不多。我正在尝试将系统时钟(正在运行)添加到我的框架中。我正在使用 jpanel 来执行此操作。这是我的代码,

import javax.swing.*;

import java.util.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Emp_Try implements ActionListener, Runnable
{
JFrame fr;
JPanel p1,p4;
JLabel tim;
Thread t,t1;
String time;

public static void main(String as[]){
new Emp_Try();
Date d=new Date();
System.out.println(d);
//System.out.println(time);
new Thread(new Time()).start();;
}

void printTime(){
Calendar cal = new GregorianCalendar();
String hour = String.valueOf(cal.get(Calendar.HOUR));
String minute = String.valueOf(cal.get(Calendar.MINUTE));
String second = String.valueOf(cal.get(Calendar.SECOND));
time=hour+":"+minute+":"+second;

}


public void run(){
for(;;){
printTime();
tim.setText(time);
p4.add(tim);
fr.repaint();
try{
Thread.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Emp_Try()
{
p4= new JPanel();
p1=new JPanel();
tim=new JLabel();
fr=new JFrame();
tim.setText(time);
p4.add(tim);
p1.add(p4);
p1.add(p4,BorderLayout.EAST);
fr.getContentPane().add(BorderLayout.NORTH, p1);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setSize(1100, 700);
fr.getContentPane().setBackground(Color.LIGHT_GRAY);
fr.setVisible(true);

}
}

使用控制台而不是 Jpanel 时。我得到了想要的结果。我怎样才能在这里得到一个工作时钟?

最佳答案

使用 Swing 时,您需要使用 Timer 事件刷新 UI 组件上的文本。这可以通过创建一个计时器并让它每 1 秒运行一次来​​轻松完成。在执行的操作中,您更新 UI 组件(例如 JLabel)以将当前时间作为其文本。所以它会显示为一个每秒更新时间的时钟。这是一个示例(基于 JLabel 和 Timer)

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ClockWindow {
private JFrame window;
private JLabel clockLabel;
public final static int ONE_SECOND = 1000;
private final SimpleDateFormat clockFormat = new SimpleDateFormat("H:mm:ss");
public ClockWindow(){
window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
clockLabel = new JLabel();
clockLabel.setFont(new Font(clockLabel.getFont().getName(), Font.PLAIN, 80));
window.getContentPane().setLayout(new BorderLayout());
window.getContentPane().add(clockLabel,BorderLayout.CENTER);
}

public void show(){

Timer timer = new Timer(ONE_SECOND, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
clockLabel.setText(clockFormat.format(new Date()));
clockLabel.repaint();
}
});
clockLabel.setText(clockFormat.format(new Date()));
timer.start();
window.pack();
window.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ClockWindow app = new ClockWindow();
app.show();
}
});
}
}

关于java - 如何向 Jpanel 添加系统时间(运行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30889601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com