2009-08-06 17 views
3

Ich habe ein einzelnes JPanel, das einen JSlider und ein JLabel enthält. Ich möchte es so konfigurieren, dass, wenn der Wert des JSliders vom Benutzer geändert wird, dieser neue Wert von JLabel widergespiegelt wird.Ändern eines JLabels-Wertes von einem JSlider-Wert

Ich verstehe, dass ich ChangeEvents mit dem Slider abfeuern kann, aber ich weiß nicht, wie ein Change zum JLabel hinzuzufügen. Hier ist ein Ausschnitt meines Codes.

scaleSlider.addChangeListener(new ChangeListener() { 
    public void stateChanged(ChangeEvent event) 
    { 
     int currentTime = ((JSlider)event.getSource()).getValue(); 
     doSomething(currentTime); 
     fireStateChanged(event); 
    } 

JLabel timeValue = new JLabel("Time: " + scaleSlider.getValue()); 
timeValue.add??? 

(ich weiß nicht, was hier jetzt tun, um die Änderungen in den Schieber zu reflektieren)

Bin ich mit diesem in die richtige Richtung? Vielen Dank im Voraus für Ihre Hilfe.

Antwort

2

Sie müssen den Änderungslistener dem Schieberegler hinzufügen.

Dann in der Änderungsmethode, die Sie implementieren müssen, ändern Sie den Wert des Textes in der JLabel.

In Bezug auf den Code, den ganzen doSomething(int) Methode tun muss, ist:

label.setText(currentTime + ""); 
+1

Perfekt, danke. –

+0

Sie sind herzlich willkommen, froh zu helfen! – jjnguy

4

Sie hören nicht für ChangeEvents auf einem JLabel. Sie hören für ChangeEvents auf dem JSlider und dann in der statechanged() -Methode einfach Sie

label.setText("Time: " + scaleSlider.getValue()); 

Keine Notwendigkeit, jede Veranstaltung entweder vom ChangeLisetner Feuer verwenden.

+0

Danke. Def übersieht diesen. –

+0

Vergessen Sie nicht, repaint() – Stroboskop

+0

'setText()' automatisch neu zu zeichnen, wenn ich mich richtig erinnere. –

2

Sie müssen dem JLabel keinen Änderungslistener hinzufügen. Wenn Ihr JLabel Mitglied Feld der Klasse ist, die den Code enthält, können Sie auf die JLabel innerhalb der Änderung des Hörers JSlider beziehen, etwa so:

public class Test() { 
    private JLabel label; 

    private void setup() { 
     label = new JLabel(); 
     JSlider scaleSlider = new JSlider(); 
     scaleSlider.addChangeListener(new ChangeListener() { 

      public void stateChanged(ChangeEvent event) { 
       int currentTime = ((JSlider)event.getSource()).getValue(); 
       label.setText(currentTime); 
      } 
     } 
    } 
} 

Sie zu jedem Bereich der äußeren Klasse innerhalb einer inneren Klasse beziehen , sogar den anonymen inneren Klassen-ChangeListener, den du auf dem scaleSlider deklariert hast.

Verwandte Themen