2015-11-11 2 views
0

Je veux créer une interface graphique dans laquelle j'affiche un nombre dynamique de lignes contenant chacune un JSlider et un JLabel qui affiche la valeur (voir la maquette).Comment distinguer plusieurs JSliders dans un ActionListener?

Multiple JSlider with related labels

Maintenant, je dois mettre à jour chaque étiquette sur un changement du curseur correspondant. Et je veux utiliser un ActionListener commun. Je pensais qu'il y a quelque chose de similaire à ActionCommand pour JButton pour identifier quel curseur a changé. Mais il n'y a pas :-(

Ma seule idée est de stocker une table de hachage avec clé = référence curseur et valeur = référence de l'étiquette est-il une solution plus élégante

modifier:.? Avec je veux dire plus élégant : sans qu'il soit nécessaire de stocker les références des curseurs et des étiquettes, donc je n'ai pas mettre à jour le Hashtable lors de la modification du nombre de lignes

+1

Pouvez-vous utiliser getSource (.) sur l'événement et vérifiez-le par rapport aux curseurs? Certes, ça ne marcherait que si les curseurs sont des variables de classe –

Répondre

1

Quelque chose comme cela devrait fonctionner

public class MyClass implements ActionListener() { 

    JSlider slider1 = new JSlider(); 
    JSlider slider2 = new JSlider(); 

    @Override 
    public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == slider1) { 
     //do logic for slider 1 
    } else if (e.getSource() == slider2) { 
     //do logic for slider 2 
    } 
    //etc... 
    } 
    //rest of class here 
} 
+0

Merci Brandon, ce serait ma solution avec le HashTable, où je stocke toutes les références et je dois toujours mettre à jour la table lorsque je change le nombre de curseurs. Je recherche donc une solution plus élégante sans avoir besoin de stocker les références. – jay