- Registriert
- 29.03.07
- Beiträge
- 799
Ich muss für die Uni ein Programm schreiben, welches ein Fenster öffnet, in dem eine analoge und eine digitale Uhr zu sehen sind. Zudem sollen dort zwei Buttons sein, mit denen man die Stoppuhren A und B starten und stoppen kann.
Bisher habe ich die zwei Uhren fertig, die Stoppuhren lassen sich per Konsole starten.
Mein Problem sind die Buttons: Ich schaffe es einfach nicht, sie zu erstellen. Könnt ihr mir helfen?
Hier nochmal die Aufgabenstellung:
Bisher habe ich die zwei Uhren fertig, die Stoppuhren lassen sich per Konsole starten.
Mein Problem sind die Buttons: Ich schaffe es einfach nicht, sie zu erstellen. Könnt ihr mir helfen?
Hier nochmal die Aufgabenstellung:
Schreiben Sie ein Programm, das zwei Uhren und zwei Stoppuhren anzeigt. Die eine Uhr ist eine Analoguhr mit einem Stunden-, einem Minuten- und einem Sekundenzeiger. Zeichnen Sie diese Uhr einfach als einen Kreis mit jeweils einem Strich für die Zeiger. Die andere Uhr ist eine Digitaluhr, die die Stunden, Minuten und Sekunden in Ziffern anzeigt. Darüber hinaus sollen zwei Stoppuhren wie in Aufgabe 69 (Zwei Stoppuhren, die mit A und B über die Konsole gestartet und gestoppt werden) realisiert werden. Start und Stop einer Stoppuhr soll durch Anklicken eines Buttons erfolgen. Erzeugen Sie für jede Uhr einen Thread.
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JDialog;
public class UhrAnwendung extends JDialog implements Runnable {
private int c_x, c_y;
private int radh, radms;
public UhrAnwendung() {
this.setAlwaysOnTop(true);
this.setLocationByPlatform(true);
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
//this.setSize(230, 230);
this.setSize(400, 400);
addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
c_x = 120;
c_y = 120;
radh = 50;
radms = 75;
this.setVisible(true);
new Thread(this).start();
}
public static void main(String[] args) {
UhrAnwendung ca = new UhrAnwendung(); //Öffnet ein Fenster und startet die analoge Uhr
Stoppuhr a = new Stoppuhr(); //Stoppuhr A
Stoppuhr b = new Stoppuhr(); //Stoppuhr B
Scanner scanner = new Scanner(System.in); //Eingabescanner
//Wenn eine Stoppuhr gestoppt wird, wird die Variable auf true gesetzt
boolean aGestoppt = false;
boolean bGestoppt = false;
//Wenn beide Variablen false sind, wird das Programm beendet
boolean aBereit = true;
boolean bBereit = true;
String eingabe = ("");
//Programm akzeptiert nur 1x Start und Stopp pro Uhr
while (aBereit == true | bBereit == true) {
//Wenn die Eingabe "A" ist
if (eingabe.equals("A")) {
eingabe = ("");
//Wenn a bereits läuft
if (a.isAlive()) {
a.interrupt(); //a stoppen
aGestoppt = true;
aBereit = false;
}
//Wenn a noch nicht läuft
else if (aGestoppt == false){
a.start(); //a starten
}
else {
System.out.println("Stoppuhr A wurde bereits gestoppt!");
}
}
//Wenn die Eingabe "B" ist
if (eingabe.equals("B")) {
eingabe = ("");
//Wenn b bereits läuft
if (b.isAlive()) {
b.interrupt(); //b stoppen
bGestoppt = true;
bBereit = false;
}
//Wenn b noch nicht läuft
else if (bGestoppt == false){
b.start(); //b starten
}
else {
System.out.println("Stoppuhr B wurde bereits gestoppt!");
}
}
else {
System.out.println("Eingabe: ");
eingabe = (scanner.nextLine());
}
//ende while
}
}
public void run() {
while (true) {
this.repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
public void paint(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
int h_x, h_y, m_x, m_y, s_x, s_y;
int h, m, s;
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(System.currentTimeMillis());
h = cal.get(Calendar.HOUR);
m = cal.get(Calendar.MINUTE);
s = cal.get(Calendar.SECOND);
h_x = (int) (radh * Math.sin(2 * Math.PI / 720 * (h * 60 + m)) + c_x);
h_y = (int) (radh
* Math.cos(2 * Math.PI / 720 * (h * 60 + m) + Math.PI) + c_y);
m_x = (int) (radms * Math.sin(2 * Math.PI / 60 * m) + c_x);
m_y = (int) (radms * Math.cos(2 * Math.PI / 60 * m + Math.PI) + c_y);
s_x = (int) (radms * Math.sin(2 * Math.PI / 60 * s) + c_x);
s_y = (int) (radms * Math.cos(2 * Math.PI / 60 * s + Math.PI) + c_y);
g.setColor(Color.DARK_GRAY);
g.fillOval(c_x - radms - 15, c_y - radms - 15, radms * 2 + 30,
radms * 2 + 30);
g.setColor(Color.LIGHT_GRAY);
g.fillOval(c_x - radms - 10, c_y - radms - 10, radms * 2 + 20,
radms * 2 + 20);
g.fillRect(c_x + 35, c_y - 10, 20, 20);
g.setColor(Color.DARK_GRAY);
g.fillOval(c_x - 3, c_y - 3, 6, 6);
g.drawLine(c_x, c_y, h_x, h_y);
g.drawLine(c_x, c_y, m_x, m_y);
g.drawLine(c_x, c_y, s_x, s_y);
g.drawString("" + h + ":" + m + ":" + s, c_x - 50, c_y + 110); //digitaluhr
}
}
class Stoppuhr extends Thread {
/**
* Der Stoppuhr-Thread
* Gibt beim starten die aktuelle Uhrzeit und beim Beenden die Uhrzeit + Dauer aus
*/
public void run() {
// Uhrzeit am Anfang
int zeitStundenAnfang = 0;
int zeitMinutenAnfang = 0;
int zeitSekundenAnfang = 0;
// aktuelle Uhrzeit mit Nachkommastellen:
double zeitStundenHeute = 0;
double zeitMinutenHeute = 0;
double zeitSekundenHeute = 0;
// aktuelle Uhrzeit ohne Nachkommastellen:
int zeitStundenAusgabe = 0;
int zeitMinutenAusgabe = 0;
int zeitSekundenAusgabe = 0;
int start = 0; // Damit der eine Ausgabe nur einmal ausgibt
int z = 1; // Für die While-Schleife
while (z == 1) {
// Interrupt:
if (isInterrupted()) {
int dauerMinuten = (int) (zeitMinutenHeute - zeitMinutenAnfang);
int dauerSekunden = (int) (zeitSekundenHeute - zeitSekundenAnfang);
// Die Zahlen werden in einen String umgewandelt, damit man nacher eine "0" vorsetzen kann
String zeitSekundenAusgabeS = ("" + zeitSekundenAusgabe);
String zeitMinutenAusgabeS = ("" + zeitMinutenAusgabe);
String dauerMinutenS = ("" + dauerMinuten);
String dauerSekundenS = ("" + dauerSekunden);
//Macht die Anfangssekunden zweistellig, sofern < 10
if (zeitSekundenAusgabe < 10) {
zeitSekundenAusgabeS = ("0" + zeitSekundenAusgabe);
}
//Macht die Anfangsminuten zweistellig, sofern < 10
if (zeitMinutenAusgabe < 10) {
zeitMinutenAusgabeS = ("0" + zeitMinutenAusgabe);
}
//Macht die Sekunden der Dauer zweistellig, sofern < 10
if (dauerSekunden < 10) {
dauerSekundenS = ("0" + dauerSekunden);
}
//Macht die Minuten der Dauer zweistellig, sofern < 10
if (dauerMinuten < 10) {
dauerMinutenS = ("0" + dauerMinuten);
}
//Ausgabe:
System.out.println("Es ist: " + zeitStundenAusgabe + ":" + zeitMinutenAusgabeS + ":" + zeitSekundenAusgabeS + " Uhr. Dauer: " + dauerMinutenS + ":" + dauerSekundenS + " min");
break;
}
// Uhrzeiten berechnen:
long zeit = System.currentTimeMillis();
//Zeit von Mitternacht 01.01.1970 bis heute:
double zeitSekunden = zeit / 1000.00; //Sekunden
double zeitMinuten = zeitSekunden / 60.00; //Minuten
double zeitStunden = zeitMinuten / 60.00; // Stunden
//aktuelle Uhrzeit:
zeitStundenHeute = 2 + zeitStunden % 24; //Stunden (heute)
zeitMinutenHeute = zeitMinuten % 60; // Minuten (heute)
zeitSekundenHeute = zeitSekunden % 60; // Sekunden (heute)
//Werte ohne Nachkommastellen:
zeitStundenAusgabe = (int)zeitStundenHeute;
zeitMinutenAusgabe = (int)zeitMinutenHeute;
zeitSekundenAusgabe = (int)zeitSekundenHeute;
//Wird einmal beim Starten des Threads ausgeführt
while (start < 1) {
zeitStundenAnfang = (int)zeitStundenHeute;
zeitMinutenAnfang = (int)zeitMinutenHeute;
zeitSekundenAnfang = (int)zeitSekundenHeute;
//Anfangssekunden- und Minuten als String
String zeitSekundenAnfangS = ("" + zeitSekundenAnfang);
String zeitMinutenAnfangS = ("" + zeitMinutenAnfang);
//Macht die Anfangssekunden zweistellig
if (zeitSekundenAnfang < 10) {
zeitSekundenAnfangS = ("0" + zeitSekundenAnfang);
}
//Macht die Anfangsminuten zweistellig
if (zeitMinutenAnfang < 10) {
zeitMinutenAnfangS = ("0" + zeitMinutenAnfang);
}
System.out.println("Es ist: " +zeitStundenAnfang + ":" + zeitMinutenAnfangS + ":" + zeitSekundenAnfangS + "Uhr");
start++;
}
}
}
}