2013-03-20 2 views
0

Puis-je ajouter un écouteur de modification et le définir lors de la création d'un nouveau JSlider? L'ordre dans lequel j'ai besoin de créer et ajouter des JSliders signifie que je ne peux pas les définir à l'avance, donc je n'ai pas vraiment le moyen de les stocker à l'avance. Essentiellement: Je n'ai pas nommé JSliders, mais j'ai besoin d'un moyen d'identifier lequel a été modifié.Plusieurs JSliders - identifier les changements

ajoutera à cela avec quelques exemples de code plus tard si ce n'est pas trop clair ce que je suis interrogé sur

EDIT:

Plus précisément, imaginez que j'ai une JSlider pour représenter une valeur minimale et une JSlider à représenter une valeur maximale. Je dois utiliser ceci pour représenter une gamme de nombres, disons les identifiants de client, qui seront montrés plus tard.

+0

[getSource()] (http://docs.oracle.com/javase/6/docs/api/java/util/EventObject.html#getSource()) devrait aider Explique. –

Répondre

3

Si vos curseurs sont définis hors de portée (à savoir l'écouteur d'événement n'a aucun moyen de référencer la variable), alors vous pouvez fournir le curseur avec un « nom », que vous pouvez rechercher et comparer

JSlider slider = new JSlider(); 
slider.setName("funky"); 

//...// 

public void stateChanged(ChangeEvent e) { 
    Object source = e.getSource(); 
    if (source instanceof JSlider) { 
     JSlider slider = (JSlider)source; 
     String name = slider.getName(); 
     if ("funky".equals(name)) { 
      // Do funky stuff 
     } 
    } 
} 

Cependant, si vous vous définissez JSlider comme champ de niveau de la classe, vous pouvez comparer la référence de la source d'événement au curseur défini ...

private JSlider slider; 

//...// 

slider = new JSlider(); 
slider.setName("funky"); 

//...// 

public void stateChanged(ChangeEvent e) { 
    if (slider == e.getSource()) { 
     // Do funky stuff 
    } 
} 

de façon réaliste, si vous pouvez, vous devriez donner à chaque curseur, il est propre auditeur et traiter avec directement m la source ...

JSlider slider = new JSlider(); 
slider.addChangeListener(new ChangeListener() { 
    public void stateChanged(ChangeEvent e) { 
     JSlider slider= (Slider)e.getSource(); 
     // Do funky stuff 
    } 
}); 
+0

Oui, je crois que cette dernière suggestion est exactement ce que je cherchais. Être capable de donner à chaque slider son propre auditeur comme ça devrait probablement fonctionner mieux que ce que j'essayais de faire pour un correctif. Je répondrai avec mon succès demain quand j'aurai implémenté ce – user1079404

+1

+1 pour les listeners séparés, ce qui peut rendre la préservation de 'max> min' plus facile. Considérons également un [curseur de gamme] (http://ernienotes.wordpress.com/2010/12/27/creating-a-java-swing-range-slider/). – trashgod

Questions connexes