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)
Danke fuer Eure Muehe!!!
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!!!