Einführung Inhaltsverzeichnis 2. Darstellung von Variablen und Werten

1. Eine einfache Uhr

Eine Uhr mit Digitalanzeige und Schaltknöpfen

DigitalUhr

in Java zu programmieren ist nicht schwer. Mit dem Knopf Aus (-schalten) wird die Uhr angehalten, mit Ein wieder eingeschaltet. Mit dem Knopf Um (-schalten) wird zwischen Sekunden- und Dreisekundentakt umgeschaltet:

public class DigitalUhr extends JFrame { // DigitalUhr.java

   private static final String TITEL = "Digitaluhr", KNOPF_EIN = "Ein", KNOPF_AUS = "Aus", KNOPF_UM = "Um";

   private static final long FREQUENZ = 1000, FREQUENZ_UM = 3000; // 1 bzw. 3 sec

   private static final int BREITE = 400, HÖHE = 300; // Größe des Frames

   private boolean uhrAn = true;

   private long frequenz;

   private JLabel anzeige;

   private JButton[] knöpfe; // Ein, Aus, Um; 

   DigitalUhr() {

     uhrAn = true;

     frequenz = FREQUENZ;

     tick(); // uhrzeit wird initialisiert

     setTitle(TITEL);

     setSize(BREITE, HÖHE);

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

     setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));

     add(new JLabel(TITEL));

     anzeige = new JLabel();

     add(anzeige);

     knöpfe = new JButton[3];

     knöpfe[0] = new JButton(KNOPF_EIN);

     knöpfe[1] = new JButton(KNOPF_AUS);

     knöpfe[2] = new JButton(KNOPF_UM);

     for (JButton knopf : knöpfe)

        super.add(knopf);

     knöpfe[0].setEnabled(false); // "Ein"

     ActionListener lauscher = new ActionListener() {

        @Override

        public void actionPerformed(ActionEvent e) {

           switch (e.getActionCommand()) { // Beschriftung des Knopfs

              case KNOPF_EIN: uhrAn = true; break;

              case KNOPF_AUS: uhrAn = false; break;

              case KNOPF_UM: frequenz = frequenz == FREQUENZ ? FREQUENZ_UM : FREQUENZ; break; }

           knöpfe[0].setEnabled(!uhrAn);

           knöpfe[1].setEnabled(uhrAn); } };

     for (JButton knopf : knöpfe)             

        knopf.addActionListener(lauscher);

     tick(); // anzeige mit der Uhrzeit initialisieren

     pack();

     setVisible(true);

     new Thread() {

        @Override

        public void run() {

           try {

              while (true) {

                tick();

                Thread.sleep(frequenz); } }

           catch (InterruptedException e) { } } }.start(); }

   private void tick() {

     if (uhrAn) {

        Calendar kalender = Calendar.getInstance();

        anzeige.setText(String.format("%02d:%02d:%02d", kalender.get(Calendar.HOUR), kalender.get(Calendar.MINUTE), kalender.get(Calendar.SECOND))); } }

   public static void main(String[] args) {

     new DigitalUhr(); } }

Am Anfang des Programms werden die Konstanten als static final festgelegt, um sie ggf. leicht modifizieren zu können. Die Methode tick() berechnet die aktuelle Uhrzeit und zeigt sie an einem JLabel an. Sie wird im Konstruktor aufgerufen, sowie vom im Konstruktor erzeugten und gestarteten Thread einmal pro Sekunde oder alle drei Sekunden (frequenz ist 1000 oder 3000 Millisekunden).

Beim Umschalten wird das Attribut frequenz (die sleep()-Zeit in Thread) zwischen den Werten FREQUENZ (1000 ms) und FREQUENZ_UM (3000 ms) umgeschaltet. Die Methode tick() aktualisiert die Anzeige nur, wenn die Uhr eingeschaltet ist.

Den drei Knöpfen wird der gleiche ActionListener hinzugefügt, dessen actionPerformed() nach der Beschriftung der Knöpfe zwischen den Aktionen unterscheidet. Eine Alternative wäre gewesen, jedem Knopf seinen eigenen ActionListener zu programmieren.

Alternative Anzeige

Einführung Inhaltsverzeichnis 2. Darstellung von Variablen und Werten


Version: 19. April 2012

© Prof. Solymosi, 20102 Beuth-Hochschule für Technik Berlin, Fachbereich VI (Informatik und Medien)

solymosibht-berlin.de