Guten Morgen,
ich versuche gerade eine kleine Stopuhr zu programmieren und soweit klappt auch alles ganz gut, das einzige, was mir noch nicht gelungen ist, ist die verstrichene Zeit in in
zu schreiben (bisher gebe ich sie nur mit
aus). Ich denke, dass ich den Timer dazu bringen müsste, ein Event zu senden, das das Label auffangen kann, allerdings blicke ich auch mit Hilfe von Google nicht, wie das funktionieren sollte … vielleicht gibt es ja auch einen eleganteren Weg?
Die Implementierung orientiert sich am Model-View-Control-Entwurfsmuster (zur Übung), wobei ich Control und View in SwControl.java zusammenfasse. Hier mal der Code
Für allgemeine Anmerkungen zum Code bin ich jederzeit offen, ich bin relativ neu dabei und hab noch nicht so richtig im Blick, wie man was am besten umsetzt. Außerdem dürft ihr mir gerne Hinweise geben, wie ich das Beispiel hier besser posten kann – aus der LaTeX-Welt kenne ich Minimalbeispiele, bei Java weiß ich aber nicht, wie man das anstellt.
Danke euch!
apple-itob
PS: Das ist keine Hausaufgabe sondern mein Privatvergnügen ;-)
ich versuche gerade eine kleine Stopuhr zu programmieren und soweit klappt auch alles ganz gut, das einzige, was mir noch nicht gelungen ist, ist die verstrichene Zeit in in
Code:
JLabel
Code:
System.out.println
Die Implementierung orientiert sich am Model-View-Control-Entwurfsmuster (zur Übung), wobei ich Control und View in SwControl.java zusammenfasse. Hier mal der Code
Java:
// Datei: SwModel.java
// Das Model implementiert die Fähigkeiten
package de.tweh.sw;
public class SwModel {
private int time = 0;
private boolean running = false;
Runnable timerRun = new Timer();
Thread timer;
public void start() {
time = 0;
System.out.println("Start");
running = true;
timer = new Thread(timerRun);
timer.start();
}
public void stop() {
running = false;
timer.interrupt();
System.out.println("Stoptime = " + time);
}
public int getTime() {
return time;
}
public boolean isRunning() {
return running;
}
class Timer implements Runnable {
public void run() {
while (running) {
try {
Thread.sleep(1000);
time++;
System.out.println("curren time = " + time);
} catch (Exception e) {
}
}
}
}
}
Java:
// Datei: SwControl.java
// DIe Control-Datei verarbeitet Benutzereingaben und stellt Ergebnisse dar
package de.tweh.sw;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class SwControl {
JButton startStopButton;
JLabel time;
SwModel mod = new SwModel();
SwControl(SwModel model) {
this.mod = model;
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
startStopButton = new JButton();
startStopButton.setText("Start");
startStopButton.addActionListener(new SwListener());
time = new JLabel();
time.setText("0");
frame.add(BorderLayout.SOUTH, startStopButton);
frame.add(BorderLayout.CENTER, time);
frame.setSize(500, 350);
frame.setVisible(true);
}
public void startStop() {
if (mod.isRunning()) {
startStopButton.setText("Start");
mod.stop();
} else {
startStopButton.setText("Stop");
mod.start();
}
}
class SwListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
startStop();
}
}
class SwTimeListener implements ChangeListener {
public void stateChanged(ChangeEvent event) {
time.setText(""+mod.getTime());
}
}
}
Java:
// Datei: StopWatch.java
// hier werden Model und Control/View vereint
package de.tweh.sw;
public class StopWatch {
public static void main(String[] args) {
SwModel mod = new SwModel();
SwControl controler = new SwControl(mod);
}
}
Für allgemeine Anmerkungen zum Code bin ich jederzeit offen, ich bin relativ neu dabei und hab noch nicht so richtig im Blick, wie man was am besten umsetzt. Außerdem dürft ihr mir gerne Hinweise geben, wie ich das Beispiel hier besser posten kann – aus der LaTeX-Welt kenne ich Minimalbeispiele, bei Java weiß ich aber nicht, wie man das anstellt.
Danke euch!
apple-itob
PS: Das ist keine Hausaufgabe sondern mein Privatvergnügen ;-)