# Wecker-Programmierung mit GUI



## aircraft_no5 (31. Mrz 2009)

Hallo alle zusammen,

nachdem ich ein wenig im Internet gestöbert habe, schien mir dieses Forum, das für mich am geeignetsten zu sein.

Ich bin Informatikstudent und habe ein kleines Problem. Aufgabe 1 war aus einem gemeinsamen Start-Projekt (Interfaces und Methoden wurden festgelegt) einen Wecker zu basteln, der in der Konsole tickt, und einen Alarm ausgibt. Das hat geklappt. Aufgabe 2 war daraufhin, hierfür eine GUI zu basteln. Der Alarm soll weiterhin nur in der Konsole ausgegeben werden, lediglich die Zeit soll in einem Fenster wie eine normale Uhr ticken. Die Granularität der Uhr sollte hierbei einstellbar sein, d.h. ich soll einstellen können, ob die Uhr jede Sekunde zählt, alle 2 Sekunden zählt, etc. Und hier fängt das Problem an: Habe mich sehr lang damit auseinandergesetzt, es aber nicht zum laufen gebracht... Ich bekomme nicht mal die Uhr in die GUI. Ich hoffe, dass jemand anhand des Codes meinen Fehler erkennt.

Vielen Dank schonmal im vorraus.

Ich hoffe, ich konnte die ganzen Klassen richtig mit Eclipse als JAR-File exportieren...


----------



## Ebenius (1. Apr 2009)

Ersteinmal: Willkommen im Forum. Sicher hilft Dir gern jemand.

Allerdings befürchte ich, dass der Aufwand, das JAR zu öffnen, sich alle Klassen azusehen, alles zu verstehen und danach zu wissen, was da nicht läuft und an welcher Stelle (bezogen auf den Quelltext) Du Hilfe benötigst, sehr hoch ist. Welchen Teil verstehst Du nicht? Was hast Du denn probiert, als Ergebnis erwartet und wie unterschied sich dies vom tatsächlich eingetretenen? Wie kann man Dir denn helfen, ohne gleich Deine gesamte Arbeit zu erledigen? 

Ebenius


----------



## hdi (1. Apr 2009)

[HIGHLIGHT="Java"]public class MyGUI extends JFrame implements TimeListener {

	// JFrame frame = new JFrame(); <-- Nein, das Fenster erbt schon von JFrame, das ist doppelt gemoppelt
	JLabel label;

        // Beachte: Das ist ein KONSTRUKTOR, keine init-Methode oder sonst was.
	public MyGui(){
                super("Wecker-GUI");
		// ...deshalb auch alle Aufrufe auf "this", nicht auf "frame"
		setSize(300, 200);
		setLocationRelativeTo(null); // zentriert das Fenster auf dem Desktop
		setDefaultCloseOperation(EXIT_ON_CLOSE);
                // setAlwaysOnTop(true); <- wird das verlangt? Das is eig. nicht so toll
                label = new JLabel(); // das is schöner als es direkt oben hinzuschreiben
		add(label);
		// setVisible(true); <- Nein, das machen wir von außen!       
	}

	public void newTime(TimeEvent event) {
		label.setText("Tick: " + event.getMillisecs());	
	}
}[/HIGHLIGHT]

Eine GUI kannst du nun starten über:

[HIGHLIGHT="Java"]MyGui gui = new MyGui();
gui.setVisible(true);[/HIGHLIGHT]

und dann in deiner Logik, die die Zeit zählt, halt immer die Zeit in der Gui updaten per

[HIGHLIGHT="Java"]
// eig. sollte hier mehr stehen, Stichwort EDT, allerdings glaub ich nicht dass ihr das schon habt/braucht
gui.newTime(woher auch immer du dieses Event hast);
[/HIGHLIGHT]


----------



## aircraft_no5 (1. Apr 2009)

Hallo,

vielen dank für die hilfe. habe das problem gefunden: habe vergessen, die update-funktion auszuprogrammieren. vielen dank trotzdem...


----------

