JTextfelder werden in while-Schleife nicht aktualisiert

Status
Nicht offen für weitere Antworten.

raptorrs

Aktives Mitglied
Moin, hochverehrte Spezialisten!!

Ich habe da ein komisches Problem.

Innerhalb einer while-Schleife wird jeweils eine Methode augerufen, die den Wert eines Textfeldes ausliest, eine kleine Addition durchfuehrt und dann den neuen Wert wieder in das Textfeld schreibt.
Gedacht hatte ich mir das so, dass bei jedem Scheifendurchlauf die beiden Textfelder auf den neuen Wert gesetzt werden, sodass man die Aenderungen visuell beobachten kann. Tatsaechlich ist es aber so, dass die beiden Felder nur am Ende, also when Timeincrement = SliderValue ist, aktualisiert werden.

Was, bitte, ist die Ursache fuer dieses Verhalten?

hier der Code, falls Ihr es ausprobieren wollt. (ist nur ein Extract aus dem eigentlichen Programm und schnell zusammengestueckelt)

Code:
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Test extends javax.swing.JFrame
{
  public Test()
  {
    initComponents();
  }

  private void initComponents()                          
  {
    slider = new javax.swing.JSlider();
    textFeld = new javax.swing.JLabel(); //Wert der Sliders
    jLabel1 = new javax.swing.JLabel();  // Text: Incrementschritte  
    feld1 = new javax.swing.JLabel(); //Zu aktualisierendes Feld
    feld2 = new javax.swing.JLabel(); //Zu aktualisierendes Feld
    startButton = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    slider.setMajorTickSpacing(1);
    slider.setMaximum(10);
    slider.setPaintLabels(true);
    slider.setPaintTicks(true);
    slider.setPaintTrack(false);
    slider.setAlignmentX(0.0F);
    slider.setAlignmentY(0.0F);
    slider.setBorder(javax.swing.BorderFactory.createEtchedBorder());
    slider.setDoubleBuffered(true);
    slider.addChangeListener(new javax.swing.event.ChangeListener()
    {
      public void stateChanged(javax.swing.event.ChangeEvent evt)
      {
        sliderStateChange(evt);
      }
    });

    textFeld.setText("10");
    textFeld.setBorder(javax.swing.BorderFactory.createEtchedBorder());
    SliderListener sl= new SliderListener(textFeld);
    slider.addChangeListener(new SliderListener(textFeld));

    jLabel1.setText("Incrementschritte");

    feld1.setText("10");
    feld1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

    feld2.setText("100");
    feld2.setBorder(javax.swing.BorderFactory.createEtchedBorder());

    startButton.setText("Start Analysis");
    startButton.addMouseListener(new java.awt.event.MouseAdapter()
    {
      public void mouseClicked(java.awt.event.MouseEvent evt)
      {
        startButtonMouseClicked(evt);
      }
    });

    org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
      .add(layout.createSequentialGroup()
        .addContainerGap()
        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
          .add(layout.createSequentialGroup()
            .add(jLabel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
            .add(textFeld, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 40, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
            .add(126, 126, 126))
          .add(layout.createSequentialGroup()
            .add(slider, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 268, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)))
        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
          .add(layout.createSequentialGroup()
            .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
              .add(feld2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 63, Short.MAX_VALUE)
              .add(org.jdesktop.layout.GroupLayout.TRAILING, feld1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 63, Short.MAX_VALUE))
            .add(60, 60, 60))
          .add(layout.createSequentialGroup()
            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
            .add(startButton)
            .addContainerGap())))
    );
    layout.setVerticalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
      .add(layout.createSequentialGroup()
        .addContainerGap()
        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
          .add(jLabel1)
          .add(feld1)
          .add(textFeld))
        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
          .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
            .add(startButton)
            .add(slider, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 67, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
          .add(feld2))
        .addContainerGap(99, Short.MAX_VALUE))
    );
    pack();
  }                        

  private void sliderStateChange(javax.swing.event.ChangeEvent evt)                                   
  {                                       

      textFeld.setText(""+slider.getValue());
  }                                  

  private void startButtonMouseClicked(java.awt.event.MouseEvent evt)                                         
  {                                             
    System.out.println("ooops, die Mouse wurde auf START Analysis geklickt!!");
    setzeFelder();
  }                                        
              
  private void setzeFelder() // In dieser Schleife sollten eigentlich die beiden Textfelder
                             // bei jedem Durchlauf neu gesetzt werden
    { 
            while (timeincrement<=slider.getValue())
            {      
            System.out.println("Die verstrichene Zeit betraegt jetzt "+timeincrement+" Minuten");
               feld1.setText(""+(rechneWas(Double.parseDouble(feld1.getText()))));
            System.out.println("Habe das Feld 1 auf "+(Double.parseDouble(feld1.getText()))+" gesetzt");   
               feld2.setText(""+(rechneWas(Double.parseDouble(feld2.getText()))));
            System.out.println("Habe das Feld 2 auf "+(Double.parseDouble(feld2.getText()))+" gesetzt");
       
         try
      {
        Thread.sleep( 1000 ); // Warte eine Sekunde vor erneuter Rechnung
      } 
         
         catch (InterruptedException ex)
      {
        System.out.println("Uhhh, irgendetwas hat mich vorzeitig aufgeweckt!!!");
      }  
        timeincrement++;
            }
    }
  
    public double rechneWas(double feldInhalt)
    {      
           feldInhalt = feldInhalt+1.1;
           return feldInhalt;
    }


  public static void main(String args[])
  {
       Test t = new Test();
         t.setVisible(true);
  }
                   
  private javax.swing.JLabel feld1;
  private javax.swing.JLabel feld2;
  private javax.swing.JLabel jLabel1;
  private javax.swing.JSlider slider;
  private javax.swing.JButton startButton;
  private javax.swing.JLabel textFeld;
  // End of variables declaration                   

  private double feldInhalt=0.;
  private double timeincrement = 0.;

} //End of Test


class SliderListener implements ChangeListener {
    SliderListener(javax.swing.JLabel textfeld) {
    }

    public synchronized void stateChanged(ChangeEvent e) {
      //int zahl = slider.getValue();
      //textFeld.setText(frequency + " FM");
    }
  }

Danke fuer Eure Muehe!!!
 

raptorrs

Aktives Mitglied
Hm Andre,

wieso eigentlich einen neuen Thread starten?

Im Hauptthread, dem einzigen, der ja zur Zeit läuft, wird doch die Schleife durchlaufen. Und bei jedem Durchgang passiert das Programm doch die Anweisung : "Setze den Text für das Feld neu". Eigentlich müsste die Anweisung dann ja auch so durchgeführt werden?!

Ich fürchte, ich habe hier grössere Verständnisprobleme.

Was ein Thread ist, weiss ich zwar in den Grundzügen, könnte aber nicht einmal sagen, was ein neuer Thread in diesem Fall machen sollte! :-( . Habe auch noch nie einen programmiert.

Das Neusetzen der Felder ist im Übrigen eigentlich nur die Vorstufe für die Darstellung der Feldwerte in einem Balkendiagramm. Dieses ist aber nur dann effektvoll, wenn man zur Laufzeit sieht, wie sich die Balkenhöhe ändert.

Kannst Du (oder jemand anders natürlich gerne auch!) mir da noch ein wenig auf die Sprünge helfen?

Danke schon mal wieder im Vorwege!
 

André Uhres

Top Contributor
Dein Code läuft im GUI Event Thread.
Solange dein Code dort läuft bekommt die GUI keine Chance sich neu zu zeichnen.
Einen neuen Thread kannst du so starten:
Code:
       new Thread(new Runnable() {
            public void run() {
                //dies läuft im neuen Thread
            }
        }).start();
 

raptorrs

Aktives Mitglied
Andre,

auch auf die Gefahr hin, mich hier zu blamieren, aber ich verstehe beim besten Willen nicht, was Du meinst!

Wieviele Threads laufen denn in diesem Progrämmchen?? Ich könnte das Problem verstehen, wenn ich parallel irgendetwas völlig unabhängiges nebenbei machen wolte (Zum Beispiel irgend etwas Blinken lassen), aber hier läuft doch alles von oben nach unten ab?? Ich versteh's nicht, sorry.

Und was soll in dem neuen Thread ablaufen?? Die Methode "setzeFelder" ?? Werd's nachher mal probieren.

Danke Dir auf jeden Fall
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
melaniemueller JavaFX Beispiel kann nicht ausgeführt werden AWT, Swing, JavaFX & SWT 4
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
W Können Animationen in JavaFX "verschluckt" werden? AWT, Swing, JavaFX & SWT 8
M Umwandlung in den HSV-Farbraum lässt die Grafik pixelig werden AWT, Swing, JavaFX & SWT 8
H JButtons werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
ProggersWorld JavaFX Icons im TreeView werden nicht angezeigt AWT, Swing, JavaFX & SWT 1
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
J e(fx)clipse funkioniert nicht / imports werden Rot gekennzeichnet AWT, Swing, JavaFX & SWT 1
ronbot77 JavaFX Rechtecke werden nicht neu gezeichnet AWT, Swing, JavaFX & SWT 8
R FXML File kann nicht hinzugefügt werden! AWT, Swing, JavaFX & SWT 2
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
L Bilder werden in exportierter Datei nicht geladen AWT, Swing, JavaFX & SWT 6
J Bilder aus dem SceneBuilder werden in der Jar nicht dargestellt AWT, Swing, JavaFX & SWT 4
TheWhiteShadow JavaFX Bilder werden ungewollt Skaliert AWT, Swing, JavaFX & SWT 1
MoxxiManagarm JavaFX Auch ich versuche mit JavaFX warm zu werden AWT, Swing, JavaFX & SWT 9
A 2D-Grafik Zeichen werden über unabhängingen JRadioButton nicht gefüllt AWT, Swing, JavaFX & SWT 28
L Swing JPanels werden nicht angezeigt! AWT, Swing, JavaFX & SWT 7
ralfb1105 Swing SwingWorker - max 10 Threats werden gestartet !? AWT, Swing, JavaFX & SWT 5
S Fehler: Hauptklasse neon.Main konnte nicht gefunden oder geladen werden AWT, Swing, JavaFX & SWT 5
A Swing Meine JButtons werden nicht angezeigt bitte helft mir AWT, Swing, JavaFX & SWT 2
J JavaFX Elemente werden nicht zu TableView hinzugefügt AWT, Swing, JavaFX & SWT 3
SchmidiMC 2D-Grafik Grafiken werden nicht gezeichnet AWT, Swing, JavaFX & SWT 2
J Controler werden nicht inialisiert - Warum ? AWT, Swing, JavaFX & SWT 12
J TableView Daten werden nicht ausgegeben AWT, Swing, JavaFX & SWT 9
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
R JRE, NPAPI Java Plugins: Werden Plugins weiterhin bereit gestellt? AWT, Swing, JavaFX & SWT 5
I JAVA 8, JAVAFX und Eclipse – muss Eclipse extra eingerichtet werden? AWT, Swing, JavaFX & SWT 9
L Swing JComboBox kann nicht erstellt werden! AWT, Swing, JavaFX & SWT 2
DerMauri JavaFX Raspberry Pi meldet "Hauptklasse konnte nicht gefunden oder geladen werden" AWT, Swing, JavaFX & SWT 10
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
J Swing Strings werden nicht in Textfeld geschrieben AWT, Swing, JavaFX & SWT 8
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
MrSnake ComboBox-Einträge werden unsichtbar AWT, Swing, JavaFX & SWT 0
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
X JavaFX Tooltips für XYChart-Knoten werden nicht angezeigt! AWT, Swing, JavaFX & SWT 3
P JavaFX - XCF Datei von Gimp kann nicht angezeigt werden AWT, Swing, JavaFX & SWT 3
J Meine ProgBar und ProgIndi werden nicht aktualisiert AWT, Swing, JavaFX & SWT 28
A Swing Buttons werden trotz setVisible nicht dargestellt AWT, Swing, JavaFX & SWT 14
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
C AWT Textfelder werden nicht automatisch angezeigt AWT, Swing, JavaFX & SWT 2
D Buttons werden nebeneinander angeordnet AWT, Swing, JavaFX & SWT 9
C Textfeld und Label werden nicht angezeigt (Ubuntu) AWT, Swing, JavaFX & SWT 2
9 Swing Registrierte Knöpfe mit Bildern werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
W Swing Farbige JPanels auf JFrame werden nicht gezeigt. Was mach ich falsch? AWT, Swing, JavaFX & SWT 7
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
L Tooltips werden nicht mehr angezeigt AWT, Swing, JavaFX & SWT 5
R Swing Buttons werden nicht angezeigt AWT, Swing, JavaFX & SWT 4
K JTabs werden nicht angezeigt AWT, Swing, JavaFX & SWT 6
kaoZ Swing JToolBar, ImageIcon werden teilweise verdeckt AWT, Swing, JavaFX & SWT 0
S Swing Tooltips werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
D JavaFX Mysteriöser Dropshadow hinter Tablabelschrift - Schatten kann nicht entfernt werden (FXML + CSS) AWT, Swing, JavaFX & SWT 6
I Swing Bilder werden nach Export nicht angezeigt AWT, Swing, JavaFX & SWT 1
A Swing JColorChooser's Icon will nicht getauscht werden. AWT, Swing, JavaFX & SWT 10
G JavaFX TableView - Änderungen werden nicht übernommen. AWT, Swing, JavaFX & SWT 3
A Swing Bilder werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
A Swing Parameter werden bei Funktionsaufruf nicht ausgegeben AWT, Swing, JavaFX & SWT 2
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
J Abbrechen muss immer einmal mehr gedrückt werden AWT, Swing, JavaFX & SWT 3
A Swing ActionListener kann nicht hinzugefügt werden AWT, Swing, JavaFX & SWT 4
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
S Swing Inhalte von Scroll-Panes werden nicht gezeichnet AWT, Swing, JavaFX & SWT 9
Z Swing JPanel soll größer werden als Parent Container (überlappen) AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Mausbewegungen werden gepuffert AWT, Swing, JavaFX & SWT 2
J CMD: Hauptklasse konnte nicht gefunden werden AWT, Swing, JavaFX & SWT 4
F Applet JApplet per html einbinden - Main class kann nicht gefunden werden AWT, Swing, JavaFX & SWT 15
F Bilder werden nicht in's Array geladen AWT, Swing, JavaFX & SWT 4
maestr0 SWT ContainerSelectionDialog kann nicht importiert werden AWT, Swing, JavaFX & SWT 2
X JTable Selektierte Reihe kann nicht gelöscht werden AWT, Swing, JavaFX & SWT 2
T iText - JTable to PDF - titel werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
El_Lobo Swing Swing TextArea und JTextField werden nicht aktualisiert AWT, Swing, JavaFX & SWT 2
R Button soll nach dem er gedrückt wurde auf setVisible(false) gestellt werden. AWT, Swing, JavaFX & SWT 3
N Meine JLabels werden nicht angezeigt AWT, Swing, JavaFX & SWT 6
alex_fairytail LayoutManager NullLayout überlappende Labels werden nicht angezeigt AWT, Swing, JavaFX & SWT 4
aze Werden Applets browserunabhängig angezeigt ? AWT, Swing, JavaFX & SWT 3
F JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte AWT, Swing, JavaFX & SWT 3
M Swing CheckBoxen werden nicht in jTable angezeigt AWT, Swing, JavaFX & SWT 3
JuliaOne Komponenten innerhalb eine JScrollpane werden auch ausserhalb davon gezeichnet! AWT, Swing, JavaFX & SWT 7
xehpuk Swing Komponenten werden durch setFont() winzig AWT, Swing, JavaFX & SWT 3
P Bilder werden nach Änderung nicht angezeigt AWT, Swing, JavaFX & SWT 15
D Problem mit JFileChooser -> Daten werden mit anführungsstriche in JTable geschrieben AWT, Swing, JavaFX & SWT 8
Weltall 7 Swing JPanels werden doppelt gezeichnet AWT, Swing, JavaFX & SWT 6
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
R Panel dupliziert sich und Textboxes werden nicht angezeigt [Anfänger] AWT, Swing, JavaFX & SWT 6
J Swing JPanels werden ständig gezeichnet AWT, Swing, JavaFX & SWT 11
N JTable row darf dicht selektiert werden AWT, Swing, JavaFX & SWT 2
M Menübar soll bestehen bleiben, wenn andere Masken geöffnet werden AWT, Swing, JavaFX & SWT 4
Weltall 7 AWT Maus-Events werden doppelt ausgeführt AWT, Swing, JavaFX & SWT 12
alderwaran jFileChooser showSaveDialog, dateinamen werden mit pfadnamen überschrieben beim navigieren AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben