2009-08-06 14 views
3

J'ai un seul JPanel qui contient un JSlider et un JLabel. Je veux le configurer de sorte que lorsque la valeur de JSlider est modifiée par l'utilisateur, cette nouvelle valeur est reflétée par le JLabel.Modification de la valeur d'un JLabel à partir de la valeur d'un JSlider

Je comprends que je peux déclencher ChangeEvents avec le Slider, mais je ne sais pas comment ajouter un ChangeListener au JLabel. Voici un extrait de mon code.

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

(je ne sais pas quoi faire maintenant afin de refléter les changements du curseur)

Vais-je dans la bonne direction avec cela? Merci d'avance pour votre aide.

Répondre

2

Ce que vous devez faire est d'ajouter l'écouteur de modification au curseur.

Ensuite, dans la méthode de modification que vous devez implémenter, modifiez la valeur du texte dans JLabel.

En ce qui concerne votre code, toute la méthode doSomething(int) doit faire est:

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

Parfait, merci. –

+0

Vous êtes les bienvenus, heureux d'aider! – jjnguy

4

Vous n'écoutez pas ChangeEvents sur un JLabel. Vous écouter ChangeEvents sur le JSlider puis dans la méthode stateChanged() que vous utilisez simplement

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

Pas besoin de tirer tout état de cause de la ChangeLisetner soit.

+0

Merci. Def surpasser celui-ci. –

+0

ne pas oublier d'appeler repaint() – Stroboskop

+0

'setText()' repeint automatiquement, si je me souviens bien. –

2

Vous n'avez pas besoin d'ajouter un écouteur de modification au JLabel. Si votre JLabel est un champ membre de la classe qui contient le code, vous pouvez vous référer à la JLabel au sein de l'écouteur de modification du JSlider, comme ceci:

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); 
      } 
     } 
    } 
} 

Vous pouvez consulter le champ de toute classe externe au sein de toute classe intérieure , même le ChangeListener anonyme de classe interne que vous avez déclaré sur le scaleSlider.