JList qui ne sélectionne pas le dernier élément si on clique en dessous de celui-ci
Posté par Thibault, le 10/06/09 à 17:59Dans une JList, si afficher tous les éléments prend moins de place que la hauteur de la liste et si on clique en dessous du dernier élément, ce dernier devient sélectionné. Un moyen de contourner le problème est de supprimer tous les MouseListener et MouseMotionListener enregistrés à la JList, et d’implémenter son propre MouseListener.
Voici une solution d’implémentation assez simple. Si un clic est fait en dessous du dernier élément, plus aucun élément ne sera sélectionné. Attention, seul le mode SINGLE_SELECTION fonctionnera avec cette solution.
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JList;
/**
* Liste dont le dernier élément n'est pas sélectionné si on clique
* en dessous de celui-ci.
* Seul le mode SINGLE_SELECTION est supporté.
*
* @author Thibault Leruitte
*/
public class MyJList extends JList {
public MyJList() {
// Remove listeners
for (MouseListener listener : getMouseListeners()) {
removeMouseListener(listener);
}
for(MouseMotionListener listener : getMouseMotionListeners()) {
removeMouseMotionListener(listener);
}
// Add a basic listener
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int index = locationToIndex(e.getPoint());
if(getCellBounds(index, index).contains(e.getPoint())) {
// clic inside one element of the list
setSelectedIndex(index);
}
else {
// clic below last element
clearSelection();
}
}
});
}
}
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JList;
/**
* Liste dont le dernier élément n'est pas sélectionné si on clique
* en dessous de celui-ci.
* Seul le mode SINGLE_SELECTION est supporté.
*
* @author Thibault Leruitte
*/
public class MyJList extends JList {
public MyJList() {
// Remove listeners
for (MouseListener listener : getMouseListeners()) {
removeMouseListener(listener);
}
for(MouseMotionListener listener : getMouseMotionListeners()) {
removeMouseMotionListener(listener);
}
// Add a basic listener
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int index = locationToIndex(e.getPoint());
if(getCellBounds(index, index).contains(e.getPoint())) {
// clic inside one element of the list
setSelectedIndex(index);
}
else {
// clic below last element
clearSelection();
}
}
});
}
}
Dans Articles | Pas de commentaires