ich habe mir eine stoppuhr mit reinem AWT programmiert, die stunden, minuten und sekunden anzeigen kann. auf die genauigkeit der uhr habe ich keinen wert gelegt. (da müsste man wohl mit die zeiten der Stoppuhr mit der Systemzeit abgleichen oder so..)
Wie dem auch sei, das Programm funktioniert soweit, jedoch sieht der code für mich relativ hässlich aus (v.a. das statische Label das aus meiner MyTime Klasse verändert wird gefällt mir überhaupt nicht, und in einer inneren Klasse möchte ich diese (Thread)-Klasse aufgrund der lesbarkeit nicht haben.
Deshalb eine bitte an euch: bitte sagt mir was ich besser machen kann/soll/muss damit sich das Programm einigermaßen sehen lassen kann.
Einige infos zum Code:
Es gibt 3 Klassen.
-1.Klassse: die Main Klasse --> ruft nur MyFrame auf
-2.Klasse: die MyFrameKlasse (extends Frame) --> zeichnet das Fenster und stellt schließen sowohl übers menu als auch über "schließen" zur verfügung. Außerdem besitzt MyFrame innereKlassen (MyButtonListener, MyWindowCloser, MyMenuCloser)
-3. Klasse: MyTime (implements Runnable) --> ist für das heraufzählen der zeit zuständig
ich danke allen, die sich die mühe machen, sich mit meinem code zu beschäftigen
Sg
Wie dem auch sei, das Programm funktioniert soweit, jedoch sieht der code für mich relativ hässlich aus (v.a. das statische Label das aus meiner MyTime Klasse verändert wird gefällt mir überhaupt nicht, und in einer inneren Klasse möchte ich diese (Thread)-Klasse aufgrund der lesbarkeit nicht haben.
Deshalb eine bitte an euch: bitte sagt mir was ich besser machen kann/soll/muss damit sich das Programm einigermaßen sehen lassen kann.
Einige infos zum Code:
Es gibt 3 Klassen.
-1.Klassse: die Main Klasse --> ruft nur MyFrame auf
-2.Klasse: die MyFrameKlasse (extends Frame) --> zeichnet das Fenster und stellt schließen sowohl übers menu als auch über "schließen" zur verfügung. Außerdem besitzt MyFrame innereKlassen (MyButtonListener, MyWindowCloser, MyMenuCloser)
-3. Klasse: MyTime (implements Runnable) --> ist für das heraufzählen der zeit zuständig
Java:
package stoppuhr.v2;
public class Main {
public static void main(String[] args) {
MyFrame frame = new MyFrame("Stoppuhr");
}
}
Java:
package stoppuhr.v2;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MyFrame extends Frame {
private static final long serialVersionUID = 1L;
private Button start, stop;
private Panel p1, p2;
private MyTime myTimeClass = new MyTime();
public static Label ausgabe = new Label("00:00:00");
public MyFrame(String titel) {
setTitle(titel);
setSize(600, 300);
setLayout(new GridLayout(2, 1));
setResizable(false);
setVisible(true);
addMyMenu();
p1 = new Panel();
p1.setLayout(new FlowLayout()); // innerhalb von p1 soll alles nebeneinander sein.
p2 = new Panel();
p2.setLayout(new FlowLayout()); // hier dasselbe wie oben.
start = new Button("Start");
start.addActionListener(new MyButtonListener());
stop = new Button("Stop");
stop.setEnabled(false);
stop.addActionListener(new MyButtonListener());
p2.add(ausgabe);
p1.add(start);
p1.add(stop);
this.add(p2, new FlowLayout());
this.add(p1);
addWindowListener(new MyWindowCloser());
}
public void addMyMenu() {
MenuBar bar = new MenuBar();
Menu menu1 = new Menu("Close");
MenuItem item1 = new MenuItem("fenster schließen");
item1.addActionListener(new MyMenuCloser());
menu1.add(item1);
bar.add(menu1);
setMenuBar(bar);
}
public static void setLabelText(String name) {
ausgabe.setText(name);
}
class MyButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// System.out.println(e.getActionCommand()); // .getActionCommand() gibt
// // sichtbaren Namen des Buttons etc. zurück
if (e.getSource().equals(start)) {
myTimeClass.setRunning(true);
start.setEnabled(false);
stop.setEnabled(true);
myTimeClass.setRunning(true);
Thread erster = new Thread(myTimeClass);
erster.start();
}
if (e.getSource().equals(stop)) {
myTimeClass.setRunning(false);
start.setEnabled(true);
stop.setEnabled(false);
}
// System.out.println(e.getSource()); // .getSource() gibt referenz des Objekts
// zurück.?
}
}
class MyWindowCloser extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
class MyMenuCloser implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
}
Java:
package stoppuhr.v2;
public class MyTime implements Runnable {
public int sec, min, h;
private boolean isRunning = true;
public void validTimeFormat() {
if (sec == 60) {
min++;
sec = 0;
}
if (min == 60) {
h++;
min = 0;
}
}
@Override
public void run() {
resetTime();
while (isRunning) {
try {
Thread.sleep(999);
} catch (InterruptedException e) {
e.printStackTrace();
}
sec++;
validTimeFormat();
intTimeToString();
MyFrame.setLabelText(h + " : " + min + " : " + sec);
}
}
private void resetTime() {
sec = 0;
min = 0;
h = 0;
}
public void intTimeToString() {
String s = String.valueOf(sec);
String m = String.valueOf(min);
String hr = Integer.toString(h);
}
public void setRunning(boolean value) {
isRunning = value;
}
}
ich danke allen, die sich die mühe machen, sich mit meinem code zu beschäftigen
Sg
Zuletzt bearbeitet: