76 votes

Événement double-clic sur un élément JList

J'ai un JList avec un DefaultListModel .

Comment faire pour qu'un article dans un JList réagir à l'événement double-clic ?

148voto

Mohamed Saligh Points 3535
String[] items = {"A", "B", "C", "D"};
JList list = new JList(items);

list.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent evt) {
        JList list = (JList)evt.getSource();
        if (evt.getClickCount() == 2) {

            // Double-click detected
            int index = list.locationToIndex(evt.getPoint());
        } else if (evt.getClickCount() == 3) {

            // Triple-click detected
            int index = list.locationToIndex(evt.getPoint());
        }
    }
});

26 votes

Notez que si la liste comporte un espace vide, et qu'un utilisateur double-clique sur cet espace vide, cela détectera un double-clic sur le dernier objet de la liste. Si vous voulez détecter uniquement les clics dans la zone de la liste qui contient des éléments, vous pouvez vérifier comme suit : Rectangle r = list.getCellBounds(0, list.getLastVisibleIndex()) ; if (r != null && r.contains(evt.getPoint())) { int index = list.locationToIndex(evt.getPoint()) ; }

17 votes

Ne serait-il pas suffisant de demander à la JList l'élément actuellement sélectionné, au lieu d'utiliser locationToIndex ? c'est-à-dire appeler simplement list.getSelectedIndex().

4 votes

Cet exemple se déclenchera en cas de clics multiples sur tout bouton de la souris. Si vous ne vous préoccupez que du premier bouton, vous voudrez également contrôler if (evt.getButton() == MouseEvent.BUTTON1)

12voto

SandroMarques Points 41

(d'après Mohamed Saligh, la réponse acceptée)

Si vous utilisez NetBeans

Sélectionnez la fenêtre JList > Events > mouseClicked

private void jListNicknamesMouseClicked(java.awt.event.MouseEvent evt) {                                            
    JList list = (JList)evt.getSource();
    if (evt.getClickCount() == 2) {
        int index = list.locationToIndex(evt.getPoint());
        System.out.println("index: "+index);
    }
}

11voto

camickr Points 137095

Je sais que vous avez une solution simple, mais vous pourriez vouloir vérifier Action de liste pour une solution plus générale qui vous permettra d'utiliser la souris aussi bien que le clavier. Une bonne conception de l'interface graphique devrait permettre d'utiliser l'une ou l'autre de ces approches.

L'exemple le plus élémentaire de l'utilisation du ListAction serait :

String[] data = { "zero", "one", "two", "three", "four", "five" };
JList list = new JList( data );

Action displayAction = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
        JList list = (JList)e.getSource();
        System.out.println(list.getSelectedValue());
    }
};

ListAction la = new ListAction(list, displayAction);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X