我对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。我得到了理想的结果。我怎样才能在这里获得工作时钟?
答案 0 :(得分:2)
使用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();
}
});
}
}