ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
624
624
EMPFEHLEN
-
Hallo Leute,
Ich möchte eine GUI Schreiben, die eine Schlange an einer Kasse in der Mensa mit Studenten veranschaulicht. Mein Quellcode birgt aber noch einige Fehler, befasse mich auch erst seid kurzem mit GUIs. Bevor ich sage was ich will, hier mal mein Quellcode:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.DefaultTableModel; /** * * Beschreibung * * @version 1.0 vom 01.12.2011 * @author Niklas Riecken */ class output{ static Schlange warteSchlange = new Schlange(); static Random zufallszahl = new Random(); static Student student; static DefaultTableModel model = new DefaultTableModel(); static JLabel t; static JFrame f; public output(){ //Frame erstellung JFrame f = new JFrame("Mensaschlange"); f.setLayout(new BorderLayout()); //Labelerstellung JLabel l = new JLabel("Studenten in der Mensaschlange"); JLabel t = new JLabel("Durchschnittliche Wartezeit: 1 min"); l.setHorizontalAlignment(JLabel.CENTER); t.setHorizontalAlignment(JLabel.CENTER); //Tabelle JTable table = new JTable(model); JScrollPane pane = new JScrollPane(table); model.addColumn("Student"); model.addColumn("Wartezeit"); model.addColumn("Mahlzeiten"); int x = model.getRowCount(); //Panelregelungen f.getContentPane().add(BorderLayout.NORTH, l); f.getContentPane().add(BorderLayout.SOUTH, t); f.getContentPane().add(BorderLayout.CENTER, pane); f.pack(); f.setVisible(true); emuliere(); } public static void emuliere() { double aktuelleZeit = 0; double studentenmenge = 0; double wartezeitgesamt = 0; double durchschnittlichewartezeit = 0; for(int i=1; i<=5; i++){ student = new Student(aktuelleZeit); warteSchlange.enqueue(student); studentenmenge++; model.addRow(new Object[]{student.getNummer(), durchschnittlichewartezeit + 1 + " min", student.getEssen()}); } while (aktuelleZeit <=100) { if (zufallszahl.nextInt(100)>50) { student = new Student(aktuelleZeit); warteSchlange.enqueue(student); model.addRow(new Object[]{student.getNummer(), durchschnittlichewartezeit + 1 + " min", student.getEssen()}); warteSchlange.enqueue(student); studentenmenge++; } if (zufallszahl.nextInt(100)>50 && warteSchlange.isEmpty() == false){ wartezeitgesamt = wartezeitgesamt + (aktuelleZeit - student.getStartzeit()); student = (Student)warteSchlange.front(); warteSchlange.dequeue(); }; durchschnittlichewartezeit = (wartezeitgesamt / studentenmenge); aktuelleZeit++; } durchschnittlichewartezeit = (wartezeitgesamt / studentenmenge); } }
Die Klasse output wird von einer anderen GUI aus aufgerufen. Ich möchte gerne, dass der die while schleife durchläuft aber nach jedem Durchlauf eine Sekunde lang wartet. Dann möchte ich noch, dass wenn das dequeue stattfindet, der gemachte Tabelleneintrag ( was immer die letzte Zeile sein muss!! ) gelöscht wird. Außerdem soll, die durchschnittliche Wartezeit die im SOUTH per Label angezeigt wird sich ebenfalls immer aktualisiert. Wie bekomme ich das hin?
Danke für eure Hilfe schonmal im Vorraus!
NiklasGeändert von Nikke123 (01.12.11 um 22:49 Uhr)
-
01.12.11 22:45 #2
- Registriert seit
- Jun 2009
- Beiträge
- 870
Hi
Pack deinen Code bitte in java-Tags (siehe meine Signatur).
Und normalerweise solltest du nicht die Tabelle in festen Zeitintervallen neu zeichnen/aktualisieren, sondern:
a) die Funktionalität per Listener implementieren (aktives Abfragen von Werten ist böse weil unnötige Rechenlast und hohe Delays)
b) per Timer regelmäßig eine Methode ausführen, die nach geänderten Daten sucht und ggf. neu zeichnet (siehe http://openbook.galileocomputing.de/...sel_19_028.htm )Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Also die Java Tags hab ich gemacht. Was du mit Listener meinst, verstehe ich noch nicht ganz aber der Teil mit der While Schleife und der ForSchleife ist vorgegeben von meinem Lehrer. Eigentlich erfüllt das Programm mit der Konsole seinen Zweck aber ich möchte das gerne erweitern mit einer GUI um selber die GUI und Anweundungen damit zu erlernen. zu B ehm kannst du mir das kurz erläutern wie ich das einbringen muss?
Danke schonmal
Niklas
-
02.12.11 07:51 #4Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
Es sind doch Javatags?
Ich versteh da "Ok, jetzt hab ich Javatags".
Vorher war es übrigens [PHP]...[/PHP].
Zum Thema: Was verstehst du bei B am Link nicht?Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Ich verstehe einfach das nicht so ganz genau:
Kann mir das bitte wer erklären?Code java:1 2 3 4 5 6
javax.swing.Timer t = new javax.swing.Timer( 1000, new ActionListener() { public void actionPerformed( ActionEvent e ) { p.repaint(); } }); t.start(); // t.stop() beendet.
-
Damit setzt du einen Timer in Gang, der jede Sekunde
macht.Code java:1
p.repaint();
Ist nur eine vllt. ungewohnte Schreibweise,
die Methode so im Konstruktor definieren.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Okay... Da spuckt der schonmal keine Fehlermeldungen bei raus und alles klappt. Jetzt soll das Programm im Abschnitt der While Schleife nach jedem Durchlauf 1 Sekunde warten. Wie bekomme ich das hin? Denn mit:
klappt das nicht.Code java:1
Thread.sleep(1000);
Wenn ich:
mache, und mein Programm starte, wird der Frame erzeugt aber meine Tabelle ist nicht zu sehen der Panel ist quasi alles weis und der XButton funktioniert auch nicht mehr dann muss ich den Prozess beenden...Code java:1 2 3 4 5
try { Thread.sleep(2000); } catch (InterruptedException e) { //nichts }
Geändert von sheel (02.12.11 um 16:16 Uhr) Grund: Doppel
-
Sleeps gehören, wenn überhaupt, nicht in einen Gui-Thread.
Das Aufhängen in dem Fall ist völlig normal.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Soweit so gut, aber wie regle ich es denn dann, dass die While Schleife nach jedem Durchgang eine Sekunde wartet bevor sie den nächsten Durchgang macht?
-
02.12.11 22:16 #11
- Registriert seit
- Jun 2009
- Beiträge
- 870
Du sollst nicht in einer while-Schleife warten. Nutze einfach den Timer.
Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Aber der Timer macht ja nur Repaint ich will aber dass der in der While Schleife nach jedem Durchgang eine Sekunde abwartet bevor der den nächsten Durchlauf macht
-
05.12.11 14:32 #13Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
Ähnliche Themen
-
JTable aktualisieren
Von georgenis im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 01.03.10, 09:55 -
JTable aktualisieren
Von Manuel Hegemann im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 03.10.07, 14:22 -
JTable aktualisieren
Von jueman im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 4Letzter Beitrag: 04.08.07, 01:46 -
JTable zur Laufzeit aktualisieren
Von cHucKy51 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 6Letzter Beitrag: 03.08.07, 15:59 -
JTable aktualisieren
Von gondor im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 15Letzter Beitrag: 11.08.04, 09:49





Zitieren



Login





