Die in diesem Artikel beschriebenen Beispiele können die dynamische Zeitanzeige von Java auf der Schnittstelle realisieren. Die spezifischen Implementierungsmethoden sind wie folgt zusammengefasst:
1. Methode 1 verwendet TimerTask:
Verwenden Sie java.util.Timer und java.util.TimerTask für dynamische Aktualisierungen. Schließlich kann davon ausgegangen werden, dass jede Aktualisierung einmal pro Sekunde erfolgt.
Der Code lautet wie folgt:
import java.awt.Dimension;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;/** * Diese Klasse ist eine einfache JFrame-Implementierung, um zu erklären, wie um * die Zeit dynamisch auf der JSwing-basierten Schnittstelle anzuzeigen. * /* * Variablen */ private JLabel timeLabel; private String DEFAULT_TIME_FORMAT; mm:ss"; private String time; private int ONE_SECOND = 1000; public TimeFrame() { timePanel = new JPanel(); timeLabel = new JLabel("CurrentTime: "); configTimeArea(); timePanel.add(timePanel); (EXIT_ON_CLOSE); this.setSize(new Dimension(200,70)); this.setLocationRelativeTo(null); } /** * Diese Methode erstellt eine Timer-Aufgabe, um die Zeit pro Sekunde zu aktualisieren */ private void configTimeArea() { Timer tmr = new Timer(); Date(), ONE_SECOND); } /** * Timer-Aufgabe zum Aktualisieren des Zeitanzeigebereichs * */ protected class JLabelTimerTask erweitert TimerTask{ SimpleDateFormat dateFormatter = new SimpleDateFormat(DEFAULT_TIME_FORMAT); @Override public void run() { time = dateFormatter.format(Calendar.getInstance().getTime()); displayArea.setText(time); main(String arg[]) { TimeFrame timeFrame=new TimeFrame(); timeFrame.setVisible(true); } }
Erben Sie TimerTask, um eine benutzerdefinierte Aufgabe zu erstellen, die aktuelle Uhrzeit abzurufen und displayArea zu aktualisieren.
Erstellen Sie dann eine Timer-Instanz und führen Sie timertask alle 1 Sekunde aus. Da es bei der Verwendung von Schedule zu Zeitfehlern kommen kann, wird direkt der genauere ScheduleAtFixedRate aufgerufen.
2. Methode 2: Threads verwenden:
Dieser ist relativ einfach. Der spezifische Code lautet wie folgt:
import java.awt.Dimension;import java.text.SimpleDateFormat;import java.util.Calendar;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;/** * Diese Klasse ist eine einfache JFrame-Implementierung, um zu erklären, wie * die Zeit dynamisch auf der JSwing-basierten Schnittstelle angezeigt wird * @author Edison * */public class DTimeFrame2 erweitert JFrame implementiert Runnable{ private JPanel timeLabel; private JLabel displayArea = "HH:mm:ss"; public DTimeFrame2() = new JLabel("CurrentTime: "); displayArea = new JLabel(); timePanel.add(displayArea); this.setDefaultCloseOperation(EXIT_ON_CLOSE(new Dimension(200,70)); ); } public void run() { while(true) { SimpleDateFormat dateFormatter = new SimpleDateFormat(DEFAULT_TIME_FORMAT); displayArea.setText(dateFormatter.format( Calendar.getInstance().getTime())); try { Thread.sleep(ONE_SECOND); } Catch(Exception e) { displayArea.setText("Error!!! "); } } } public static void main(String arg[]) { DTimeFrame2 df2=new DTimeFrame2(); df2.setVisible(true); Thread thread1=new Thread(df2.start();
Vergleichen:
Persönlich bevorzuge ich Methode eins, da der Timer von mehreren TimerTasks gemeinsam genutzt werden kann und das Generieren eines Threads die Wartungskomplexität von Multithreads erhöht.
Beachten Sie den folgenden Code:
jFrame.setDefaultCloseOperation(); // Spezifisches Verhalten zur Schaltfläche „Schließen“ hinzufügen jFrame.setLocationRelativeTo(null); // Den Frame in der Mitte des Bildschirms statt oben links anzeigen lassen.
Durch leichte Modifikation der oben genannten Methode können Sie die Uhrzeit in mehreren Ländern anzeigen. Der Code lautet wie folgt:
import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util .Locale;import java.util.TimeZone;import java.util.Timer;import java.util.TimerTask;import javax.swing.DefaultComboBoxModel;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;/** * Eine einfache Weltuhr * @author Edison * */public class WorldTimeFrame erweitert JFrame{ /** * */ private static final long serialVersionUID = private String time; private TimeZone timeZone; private JLabel displayArea; private String DEFAULT_FORMAT = "EEE d MMM, HH:mm:ss"; public JComboBox(); timePanel = new JPanel(); timeZone = TimeZone.getDefault(); @Override public void actionPerformed(ActionEvent e) { updateTimeZone(TimeZone.getTimeZone((String) zoneBox.getSelectedItem())); timePanel.add(displayArea(new BorderLayout()); this.add(zoneBox, BorderLayout. NORTH); this.add(timePanel, BorderLayout.CENTER); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); * Diese Methode erstellt eine Timer-Aufgabe, um die Zeit pro Sekunde zu aktualisieren */ private void configTimeArea() Timer tmr = new Timer(); tmr.scheduleAtFixedRate(new JLabelTimerTask(),new Date(), ONE_SECOND); } /** * Timer-Task zum Aktualisieren des Zeitanzeigebereichs * */ public class JLabelTimerTask erweitert TimerTask{ SimpleDateFormat dateFormatter = new SimpleDateFormat(DEFAULT_FORMAT, Locale.ENGLISH); @Override public void run() { dateFormatter.setTimeZone(timeZone); time = dateFormatter.format(Calendar.getInstance().getTime()); displayArea.setText(time); } } /** * TimeZone aktualisieren * @param newZone */ public void updateTimeZone(TimeZone newZone) { this.timeZone = newZone ; } public static void main(String arg[]) { new WorldTimeFrame( } }
Ursprünglich muss die displayArea in updateTimeZone (TimeZone newZone) aktualisiert werden. Wenn man jedoch bedenkt, dass die Ausführungszeit von TimerTask mit bloßem Auge zu kurz ist (nur 1 Sekunde), entspricht dies im Grunde einer sofortigen Aktualisierung. Wenn die Ausführungszeit von TimerTask lang ist, sollte displayArea sofort und sorgfältig aktualisiert werden.
Auffüllen:
①. pack() wird verwendet, um die Bildschirmgröße automatisch zu berechnen;
② TimeZone.getAvailableIDs() wird verwendet, um alle Zeitzonen abzurufen.