Je voudrais créer ma propre méthode qui contrôle quand un composant est 'isSelected'. J'ai un JList
contenant plusieurs JPanel
. La classe de construction du JPanel extends ListCellRenderer<>
.Méthode de remplacement qui fait basculer 'isSelected' dans getListCellRendererComponent
Pour montrer que l'un des composants JList (les JPanels) est sélectionné, j'utilise;
@Override
public Component getListCellRendererComponent(..., boolean isSelected, ...) {
if(isSelected){
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
return this;
}
Je voudrais une méthode qui maintient un élément sélectionné 'sélectionné' bien que je choisisse d'en sélectionner un autre. Je comprends que cela peut être fait en maintenant CTRL, mais .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
ne fait pas tout à fait le tour. Je préférerais en sélectionner plusieurs en cliquant dessus, et désélectionner en cliquant dessus.
Pour cela, j'ai travaillé avec le ListSelectionMode, mais je ne trouve pas de solution. Lorsque vous avez fait ce qui précède, je voudrais implémenter une méthode qui sélectionne seulement un composant dans la liste lorsqu'on clique sur une certaine zone (au lieu du composant entier qui est prédéfini). J'ai fait cette méthode, qui retourne vrai si l'on clique sur la bonne zone, sinon faux. Mais comme je n'arrive pas à comprendre comment remplacer le mouseevent qui rend les composants 'isSelected' cela a été difficile.
Voici le code de la méthode que je voudrais remplacer la méthode 'isSelected';
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent evt) {
if(ActionHandler.mouseClickedPrebuild(evt.getPoint())){
//This code runs if that special place is clicked!
//So now the component should be 'isSelected' or
//deselected if it already was 'isSelected'.
}
}
});
Ce code est dans le constructeur de mon JList
Et la méthode mouseClickedPrebuild
;
public static boolean mouseClickedPrebuild(Point point) {
int index = theJList.locationToIndex(point);
Rectangle bounds = theJList.getCellBounds(index,index);
Point p = bounds.getLocation();
return (... long list of greater than & less than ...);
//This gives the certain area which is accepted to return true
1. J'ai un JList contenant plusieurs JPanel. == JList (son XxxListModel) n'est pas conçu pour contenir JComponent, ne pas mettre JComponent dans JList (son XxxListModel), 2. à l'intérieur ListSelectionModel vous pouvez basculer ou redéfinir par programmation, 3. Pourquoi raison MouseListener, pour utiliser ListSelectionListener, lire Oracle tutoriel pour l'exemple de code de travail – mKorbel
pour une meilleure aide plus tôt après un SSCCE/MCVE, court, runnable, compilable – mKorbel
@ mKorbel - I utilisé les JComponets pour rendre les éléments de ma liste. Ma conjecture était qu'il doit y avoir un moyen de remplacer le code qui s'exécute lorsque je clique sur un élément de la liste. –