Binäruhr

Ein kleines Fensterchen mit Anzeige der Uhrzeit in digitaler Anzeige sowie als Binäranzeige.

lblDigital = Label zur Anzeige der Uhrzeit in digitaler Anzeige
lblH16, lblH8,..., lblM32, lblM16,..., lblS32, lblS16,... = Labels zur Anzeige der Uhrzeit in binärer Anzeige - weiß = 0 und rot = 1
Timer steht auf 250ms

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        lblDigital.Text = Now.Hour & ":" & Now.Minute & ":" & Now.Second
        SetStd(Now.Hour)
        SetMin(Now.Minute)
        SetSek(Now.Second)
        Timer1.Enabled = True
    End Sub

    Private Sub SetStd(ByVal stunde As Integer)
        lblH16.BackColor = Color.White
        lblH8.BackColor = Color.White
        lblH4.BackColor = Color.White
        lblH2.BackColor = Color.White
        lblH1.BackColor = Color.White
        Do While stunde > 0
            If stunde >= 16 Then
                lblH16.BackColor = Color.Red
                stunde -= 16
            ElseIf stunde >= 8 Then
                lblH8.BackColor = Color.Red
                stunde -= 8
            ElseIf stunde >= 4 Then
                lblH4.BackColor = Color.Red
                stunde -= 4
            ElseIf stunde >= 2 Then
                lblH2.BackColor = Color.Red
                stunde -= 2
            ElseIf stunde >= 1 Then
                lblH1.BackColor = Color.Red
                stunde -= 1
            End If
        Loop
    End Sub

    Private Sub SetMin(ByVal minute As Integer)
        lblM32.BackColor = Color.White
        lblM16.BackColor = Color.White
        lblM8.BackColor = Color.White
        lblM4.BackColor = Color.White
        lblM2.BackColor = Color.White
        lblM1.BackColor = Color.White
        Do While minute > 0
            If minute >= 32 Then
                lblM32.BackColor = Color.Red
                minute -= 32
            ElseIf minute >= 16 Then
                lblM16.BackColor = Color.Red
                minute -= 16
            ElseIf minute >= 8 Then
                lblM8.BackColor = Color.Red
                minute -= 8
            ElseIf minute >= 4 Then
                lblM4.BackColor = Color.Red
                minute -= 4
            ElseIf minute >= 2 Then
                lblM2.BackColor = Color.Red
                minute -= 2
            ElseIf minute >= 1 Then
                lblM1.BackColor = Color.Red
                minute -= 1
            End If
        Loop
    End Sub

    Private Sub SetSek(ByVal sekunde As Integer)
        lblS32.BackColor = Color.White
        lblS16.BackColor = Color.White
        lblS8.BackColor = Color.White
        lblS4.BackColor = Color.White
        lblS2.BackColor = Color.White
        lblS1.BackColor = Color.White
        Do While sekunde > 0
            If sekunde >= 32 Then
                lblS32.BackColor = Color.Red
                sekunde -= 32
            ElseIf sekunde >= 16 Then
                lblS16.BackColor = Color.Red
                sekunde -= 16
            ElseIf sekunde >= 8 Then
                lblS8.BackColor = Color.Red
                sekunde -= 8
            ElseIf sekunde >= 4 Then
                lblS4.BackColor = Color.Red
                sekunde -= 4
            ElseIf sekunde >= 2 Then
                lblS2.BackColor = Color.Red
                sekunde -= 2
            ElseIf sekunde >= 1 Then
                lblS1.BackColor = Color.Red
                sekunde -= 1
            End If
        Loop
    End Sub

End Class
 
Hab jetzt auch eine Lösung hierfür :rolleyes:

import java.awt.GridLayout;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Binaeruhr extends JPanel {
private final JFrame frame;
private final JLabel labelDec, labelBin;

public Binaeruhr() {
frame = new JFrame("Binäruhr");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(2, 2));
labelDec = new JLabel();
labelBin = new JLabel();
frame.add(new JLabel(" Dezimal: "));
frame.add(labelDec);
frame.add(new JLabel(" Binär: "));
frame.add(labelBin);
frame.setVisible(true);
}

public void refresh() {
Date currentTime = new Date();
labelDec.setText(printNormalTime(currentTime));
labelBin.setText(convertToBin(currentTime));
frame.pack();
}

private String printNormalTime(Date date) {
DateFormat df = new SimpleDateFormat("HH : mm : ss");
return df.format(date);
}

private String convert10To2(int number) {
List<Boolean> bin = new ArrayList<Boolean>();
while (number > 0) {
bin.add(0, number % 2 == 1);
number /= 2;
}
StringBuilder binary = new StringBuilder();
for (boolean b : bin)
binary.append(b ? 1 : 0);
return binary.toString();
}

private String convertToBin(Date date) {
StringBuilder bin = new StringBuilder();
DateFormat df = new SimpleDateFormat("HH:mm:ss");
String[] time = df.format(date).split(":");
bin.append(fill(convert10To2(Integer.parseInt(time[0])), 5)).append(" : ");
bin.append(fill(convert10To2(Integer.parseInt(time[1])), 6)).append(" : ");
bin.append(fill(convert10To2(Integer.parseInt(time[2])), 6));
return bin.toString();
}

private String fill(String bin, int size) {
StringBuilder filled = new StringBuilder();
for (int i=bin.length(); i<size; i++) {
filled.append("0");
}
filled.append(bin);
return filled.toString();
}

public static void main(String[] args) {
final Binaeruhr clock = new Binaeruhr();
while (clock.frame.isVisible()) {
Thread t = new Thread(new Runnable() {
public void run() {
clock.refresh();
}
});
try {
t.start();
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
 
Zurück
Oben