Reputation: 43
is there any way to automatically update a SimpleDateFormat digital clock on a JPanel?
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
time.setText(sdf.format(new Date()));
If I run this, the label stays at the time the script was launched...
UPDATE
What I wrote so far
import java.awt.*;
import java.awt.image.BufferedImage;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
public class test {
private JFrame frame = new JFrame("Time");
private JPanel panel = new JPanel();
private JLabel time = new JLabel();
private JButton exit = new JButton("exit");
private boolean exit_bool = false;
public test() {
panel.setLayout(new GridBagLayout());
panel.add(time);
panel.add(exit);
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(panel);
frame.setLocationRelativeTo(null);
init(true, true);
createHandler();
startTime();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
test viewable = new test();
}
});
}
public void init(boolean fullscreen, boolean mouse) {
frame.setVisible(false);
frame.dispose();
frame.setUndecorated(true);
frame.setVisible(true);
if(fullscreen) {
frame.setExtendedState(frame.MAXIMIZED_BOTH);
}
if(!mouse) {
frame.setCursor(java.awt.Toolkit.getDefaultToolkit().createCustomCursor(new BufferedImage(1,1,BufferedImage.TYPE_4BYTE_ABGR),new java.awt.Point(0,0),"NOCURSOR"));
}
}
public void startTime() {
while(!exit_bool) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
time.setText(sdf.format(new Date()));
}
}
public void createHandler() {
exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitActionPerformed(evt);
}
});
}
private void exitActionPerformed(java.awt.event.ActionEvent evt) {
exit_bool = true;
}
}
Upvotes: 1
Views: 2619
Reputation: 1023
Something like will do the trick
package net.whatever;
import javax.swing.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Clock");
frame.setSize(200, 100);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
final JLabel label = new JLabel("", SwingConstants.CENTER);
label.setFont(label.getFont().deriveFont(25f));
label.setSize(200, 100);
frame.add(label);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
String string = new SimpleDateFormat("HH:mm:ss").format(new Date());
label.setText(string);
}
}, 0, 1000);
}
}
Upvotes: 3