Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
792 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Rendre élément d'une JList non sélectionnable ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Rendre élément d'une JList non sélectionnable ?

n°1908916
Shimble
Posté le 27-07-2009 à 13:35:50  profilanswer
 

Bonjour,
 
Comme le titre l'indique, j'aimerais savoir s'il est possible de rendre certains éléments d'une JList non sélectionnables ?
 
Ainsi, on aurait une JList qui s'affiche dans un premier temps avec tous les éléments sélectionnables (les éléments étant des noms de fichiers). Puis, après chargement du répertoire de fichiers, si certains ne sont pas présents les éléments de la liste correspondants seraient grisés (ou en tout cas non cliquables).
 
J'ai vu pas mal de choses pour agir sur toute la JList (setEnabled), ou encore pour enlever des éléments mais rien pour agir uniquement sur la "sélectionnabilité" de certains éléments (sans modifier la structure globale de la JList donc)...
 
Merci d'avance !

mood
Publicité
Posté le 27-07-2009 à 13:35:50  profilanswer
 

n°1975296
neftyce
Posté le 19-03-2010 à 16:40:28  profilanswer
 

Bonjour,
 
J'espère que tu as trouvé une solution depuis le temps. J'ai eu le même problème que toi et je n'ai pas trouvé grand chose sur la toile pour m'aider donc voici ma solution, qui n'est peut-être pas optimale mais qui fonctionne :
 
Je redéfinis ma liste pour qu'elle possède une "sous-liste" d'index :

Code :
  1. public class MaJList extends JList {
  2. /**
  3.  * Cette liste propose de gérer une liste d'index qui permet  
  4.  * d'appliquer un traitement particuler à ces index.
  5.  */
  6. private ArrayList<Integer> indexSet = new ArrayList<Integer>();
  7. public ParamJList() {
  8.  super();
  9.   // pour utiliser le rendu des cellules qui suit
  10.   this.setCellRenderer(new ListGeneralParameterItem(this.listParametres));
  11. }
  12. public void addIndex(int Item) {
  13.  this.indexSet.add(Item);
  14. }
  15. public ArrayList<Integer> getIndexSet() {
  16.  return indexSet;
  17. }
  18. public void removeIndex(int Item) {
  19.  this.indexSet.remove((Object)Item);
  20. }
  21. public void removeAllIndex() {
  22.  this.indexSet.clear();
  23. }
  24. }


 
Je redéfinis le rendu des items qui sont en fait des JLabel :

Code :
  1. public class MonListItem extends JLabel implements ListCellRenderer {
  2. private MaJList parent;
  3. public MonListItem(MaJList parent) {
  4.  setOpaque(true);
  5.  this.parent = parent;
  6. }
  7. @Override
  8. public Component getListCellRendererComponent(JList list, Object value,
  9.   int index, boolean isSelected, boolean cellHasFocus) {
  10.  setText(value.toString());
  11.  setBackground(isSelected ? Color.black : Color.white);
  12.         setForeground(isSelected ? Color.white : Color.black); 
  13.  if (this.parent.getIndexSet().contains(index)) {
  14.   this.setEnabled(false);
  15.   setBackground(Color.white);
  16.  }
  17.  else this.setEnabled(true);
  18.  return this;
  19. }
  20. }


 
Dans mon JPanel ou ma JFrame, je crée ma list comme ça :

Code :
  1. MaJList list = new MaJList();


 
Et je peux directement utiliser les fonctions d'ajout ou de suppression des items de la liste des items non sélectionnables dans le JPanel ou la JFrame...
J'ai juste un petit problème de rafraîchissement : je n'arrive pas à rafraîchir automatiquement l'affichage de la liste après.
 
Voilà, j'espère que ça pourra aider des gens !!  :)
 
EDIT : Oups ! J'allais oublier une partie importante du travail, parce que là, si vous testez, les items sont de la bonne couleur (grisés) mais encore cliquables...  :pfff: honte à moi...
En effet le CellRenderer ne gère que le rendu des cellules comme son nom l'indique. Et il faut donc encore vérifier dans les bon listeners (ceux qu'on appelle quand on clique sur l'item) que l'élément sélectionné n'appartient pas à la liste des éléments non cliquables... et si c'est le cas on ne fais rien !
Bon je ne sais pas si je suis très claire mais comme je suis rentrée du boulot je n'ai plus le code sous les yeux. Promis, lundi je fignole tout ça !


Message édité par neftyce le 19-03-2010 à 17:56:28

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Rendre élément d'une JList non sélectionnable ?

 

Sujets relatifs
[CSS] Positionner texte par rapport element precedentaide faire un lien entre Jlist et des TextField
Fixer la valeur d'un élément de type complexe dans un schéma XML[JS - Prototype] Griser une div et la rendre inactive aux interactions
Comment rendre un projet java simple, sous forme d'un plugin eclipse?Recuperer / afficher élément sur evenement onclick
Position d'un sous élément en absoluteItérer "discrètement" sur un élément
[jQuery] Sélectionner le dernier élément sélectionné.Pourquoi ne pas pointer vers un élément courant dans une liste chainée
Plus de sujets relatifs à : Rendre élément d'une JList non sélectionnable ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR