J'ai un JList
avec un DefaultListModel
.
Comment faire pour qu'un article dans un JList
réagir à l'événement double-clic ?
J'ai un JList
avec un DefaultListModel
.
Comment faire pour qu'un article dans un JList
réagir à l'événement double-clic ?
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());
}
}
});
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()) ; }
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().
(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);
}
}
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 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.