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:
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!
Niklas
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:
Java:
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!
Niklas
Zuletzt bearbeitet von einem Moderator: