tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
624
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Nikke123 Nikke123 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    41
    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!
    Niklas
    Geändert von Nikke123 (01.12.11 um 22:49 Uhr)
     

  2. #2
    genodeftest genodeftest ist offline Mitglied Brillant
    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)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  3. #3
    Nikke123 Nikke123 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    41
    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
     

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von Nikke123 Beitrag anzeigen
    Also die Java Tags hab ich gemacht.
    Nö, hast Du nicht .... Du hast CODE-Tags gemacht

    Gruß
    Klaus
     
    Es 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 !!

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    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, ...?

  6. #6
    Nikke123 Nikke123 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    41
    Ich verstehe einfach das nicht so ganz genau:
    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.
    Kann mir das bitte wer erklären?
     

  7. #7
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Damit setzt du einen Timer in Gang, der jede Sekunde
    Code java:
    1
    
    p.repaint();
    macht.

    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, ...?

  8. #8
    Nikke123 Nikke123 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    41
    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:
    Code java:
    1
    
    Thread.sleep(1000);
    klappt das nicht.

    Wenn ich:
    Code java:
    1
    2
    3
    4
    5
    
                 try {
                     Thread.sleep(2000);
                 } catch (InterruptedException e) {
                     //nichts
                 }
    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...
    Geändert von sheel (02.12.11 um 16:16 Uhr) Grund: Doppel
     

  9. #9
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    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, ...?

  10. #10
    Nikke123 Nikke123 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    41
    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?
     

  11. #11
    genodeftest genodeftest ist offline Mitglied Brillant
    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)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  12. #12
    Nikke123 Nikke123 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    41
    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
     

  13. #13
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von Nikke123 Beitrag anzeigen
    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
    siehe vorletzter Post:
    Zitat Zitat von genodeftest Beitrag anzeigen
    Du sollst nicht in einer while-Schleife warten. Nutze einfach den Timer
    also TIMER anstelle der WHILE-Schleife !

    Gruß
    Klaus
     
    Es 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

  1. JTable aktualisieren
    Von georgenis im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 01.03.10, 09:55
  2. JTable aktualisieren
    Von Manuel Hegemann im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 03.10.07, 14:22
  3. JTable aktualisieren
    Von jueman im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 04.08.07, 01:46
  4. JTable zur Laufzeit aktualisieren
    Von cHucKy51 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 6
    Letzter Beitrag: 03.08.07, 15:59
  5. JTable aktualisieren
    Von gondor im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 15
    Letzter Beitrag: 11.08.04, 09:49