JList contenant des JCheckBox : gniiiiaaaaaa

JList contenant des JCheckBox : gniiiiaaaaaa - Java - Programmation

Marsh Posté le 01-04-2003 à 16:22:49    

Bonjour a tous :)
 
Je réalise une appli qui en gros permet d'editer des fichiers (on va dire ça comme ça, c pas le pb).
J'aimerai, lorsque je ferme l'appli, qu'une petite fenetre m'affiche la liste de mes fichiers modifiés non sauvegardés (ça c ok, j'ai la liste) avec a chaque fois :
-une chechbox
-le nom du fichier
 
Pour ça, je me sert d'une JList, et j'ai redefini un ListCellRenderer :

Code :
  1. public class DocumentCellRenderer extends JCheckBox implements ListCellRenderer
  2. {
  3. public DocumentCellRenderer()
  4. {
  5.  super();
  6.  setBackground(Color.white);
  7.  setBorderPaintedFlat(true);
  8. }
  9.         public Component getListCellRendererComponent(  JList list,
  10.             Object value,
  11.             int index,
  12.             boolean isSelected,
  13.             boolean cellHasFocus)
  14. {
  15.             (...)
  16.         }
  17. }


L'affichage se passe sans pb (pas tres dur).
 
En fait mon reel probleme vient de la selection. Je m'explique :
dans une JList, pour faire une selection multiples, il faut garder la touche Ctrl d'appuyée.
Or dans mon cas, le reflexe, bin c de cocher par exemple le premier fichier (la check box du fichier). Ensuite, pour en selectionner un autre, bin on click sur un autre :).
 
Or dans mon cas, j'ai dans la methode getListCellRendererComponent(JList list,Object value,
 int index, boolean isSelected, boolean cellHasFocus)) ainsi:

Code :
  1. public Component getListCellRendererComponent(  JList list,
  2.             Object value,
  3.             int index,
  4.             boolean isSelected,
  5.             boolean cellHasFocus)
  6. {
  7.  //on donne le nom du fichier
  8.  this.setText( ((Document)value).toString());
  9.                 if (isSelected)
  10.                     setSelected(true);
  11.         }


 
Et donc, ce qu'il se passe ce que je ne peux en avoir qu'un de cocher a la fois (ou alors il faut que je garde la touche Ctrl activée, dans ce cas ça marche mais c pas ce que je veux).
 
J'espere que j'ai été clair, si c pas le cas hésitez pas a me demander plus de details ;)
 
D'avance merci, parce que là je trouve pas comment faire  :jap:  

Reply

Marsh Posté le 01-04-2003 à 16:22:49   

Reply

Marsh Posté le 01-04-2003 à 16:42:21    

d'apres ce que j'ai compris, un fichier se coche lorsque tu selectionnes la ligne ?
 
heuuuu, spa top ca, tu m'etonnes que c'est pas pratique !

Reply

Marsh Posté le 01-04-2003 à 17:02:01    

:heink:  
 
non je crois que t'as pas compris :)
 
En fait je voudrai faire comme pas mal d'editeurs : une list de checkbox qui permet de choisir quel fichier sauvegarder avant de quitter l'appli (JBuilder, eclipse et tant d'autres le font).

Reply

Marsh Posté le 01-04-2003 à 17:12:22    

Petoulachi a écrit :

:heink:  
 
non je crois que t'as pas compris :)
 
En fait je voudrai faire comme pas mal d'editeurs : une list de checkbox qui permet de choisir quel fichier sauvegarder avant de quitter l'appli (JBuilder, eclipse et tant d'autres le font).


ok, ca j'ai compris. mais quand tu dis :
 

Citation :

Et donc, ce qu'il se passe ce que je ne peux en avoir qu'un de cocher a la fois (ou alors il faut que je garde la touche Ctrl activée, dans ce cas ça marche mais c pas ce que je veux).

 
tu parles de quoi alors ?
 
P.S. : je suis d'accord que trop de code tue le post, mais la, moi je cerne pas trop le fonctionnement de ta Jlist ...

Reply

Marsh Posté le 01-04-2003 à 17:12:28    

Je pense que ca doit fonctionner si tu utilises une JTable a la place d'une JList.


---------------
Light is right
Reply

Marsh Posté le 01-04-2003 à 18:11:10    

Quel est ton modèle de sélection ? (à voir dans JList.getSelectionModel()). A mon avis, ça doit répondre à ton problème.

Reply

Marsh Posté le 01-04-2003 à 20:57:37    

à priori je vois pas l'interet d'utiliser une jlist :??:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-04-2003 à 09:55:22    

alors alors :)
 
Pour mon modele de selection, je me suis effectivement posé la question, bin je suis dans le mode par defaut, c a dire MULTIPLE_INTERVAL_SELECTION.
 
Sinon, je reexplique mon pb : pour cocher plusieurs checkBox dans ma JList, il faut que je garde la touche Ctrl appuyée (normale dans une JList pour choisir plusieurs item, on garde la touche Ctrl appuyée). Moi je voudrai qu'il y ai simplement a cliquer sur la checkbox, que celle ci se coche signifiant qu'elle a été sélectionné. Mais je trouve pas comment :(
 
Je vais regarder au niveau d'une JTable en effet :)

Reply

Marsh Posté le 02-04-2003 à 10:05:24    

Petoulachi a écrit :

alors alors :)
 
Pour mon modele de selection, je me suis effectivement posé la question, bin je suis dans le mode par defaut, c a dire MULTIPLE_INTERVAL_SELECTION.
 
Sinon, je reexplique mon pb : pour cocher plusieurs checkBox dans ma JList, il faut que je garde la touche Ctrl appuyée (normale dans une JList pour choisir plusieurs item, on garde la touche Ctrl appuyée). Moi je voudrai qu'il y ai simplement a cliquer sur la checkbox, que celle ci se coche signifiant qu'elle a été sélectionné. Mais je trouve pas comment :(
 
Je vais regarder au niveau d'une JTable en effet :)


Et ben tu fais une JTable avec la derniere colonne affichant une JCheckBox, et ca RULEZZZ

Reply

Marsh Posté le 02-04-2003 à 10:34:55    

je suis en train de regarder la JTable, les problemes immediat qui se posent sans trop avoir cherché :
-je dois avoir un nom de colonne, ce qui ne m'interesse pas
-les colonnes sont visibles (séparées par un trait) ce qui là non plus ne me convient pas trop. Toutefois il y a apparemment un TableCellEditor qui devrait me permettre de tout afficher dans une seule colonne (la checkbox + nom de fichier).
 
Mais il y a toujours le pb du header du tableau :??:

Reply

Marsh Posté le 02-04-2003 à 10:34:55   

Reply

Marsh Posté le 02-04-2003 à 11:03:22    

Si tu mets le TableHeader a null ca doit fonctionner (edit: ah bah non ca ne fonctionne pas...)
Pour faire disparaitre les lignes, fait un setShowGrid(false).


Message édité par nerisson le 02-04-2003 à 11:05:55

---------------
Light is right
Reply

Marsh Posté le 02-04-2003 à 11:23:10    

Nerisson a écrit :

Si tu mets le TableHeader a null ca doit fonctionner (edit: ah bah non ca ne fonctionne pas...)
Pour faire disparaitre les lignes, fait un setShowGrid(false).


ok je note merci ;)
 
Pour les headers je trouve pas, ouin  [:totoz]

Reply

Marsh Posté le 02-04-2003 à 11:37:16    

m'enfin pourquoi tu fous pas tes checkbox dans un bete panel? :heink:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-04-2003 à 11:48:49    

the real moins moins a écrit :

m'enfin pourquoi tu fous pas tes checkbox dans un bete panel? :heink:


 
bin je voulais me servir du principe MVC parce qu'on l'a vu cette année en cours, ça aurait été bien :)

Reply

Marsh Posté le 02-04-2003 à 13:29:27    

Petoulachi a écrit :


 
bin je voulais me servir du principe MVC parce qu'on l'a vu cette année en cours, ça aurait été bien :)

je vois pas le rapport avec la list [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-04-2003 à 13:36:28    

Petoulachi a écrit :


ok je note merci ;)
 
Pour les headers je trouve pas, ouin  [:totoz]  


ben les header ne s'affichent pas par defaut, non ?
 
je vais regarder ...

Reply

Marsh Posté le 02-04-2003 à 14:54:58    

the real moins moins a écrit :

je vois pas le rapport avec la list [:spamafote]


 :heink:  
bin avec la List, je redefinie la class ListCellRenderer.
Si ça c pas le principe MVC  ;)

Reply

Marsh Posté le 02-04-2003 à 14:55:11    

bobuse a écrit :


ben les header ne s'affichent pas par defaut, non ?
 
je vais regarder ...


Sérieu ?

Reply

Marsh Posté le 02-04-2003 à 15:26:41    


Ben en fait je comprends pas trop, j'ai maté dans deux de mes projets, et je capte pas trop.
Dans un des deux j'utilise getTableHeader() pour afficher l'en-tete, mais il s'affiche dans les deux, je materai ce soir ...

Reply

Marsh Posté le 02-04-2003 à 15:35:50    

bobuse a écrit :


Ben en fait je comprends pas trop, j'ai maté dans deux de mes projets, et je capte pas trop.
Dans un des deux j'utilise getTableHeader() pour afficher l'en-tete, mais il s'affiche dans les deux, je materai ce soir ...


ok merci :)

Reply

Marsh Posté le 02-04-2003 à 16:24:18    

Petoulachi a écrit :


 :heink:  
bin avec la List, je redefinie la class ListCellRenderer.
Si ça c pas le principe MVC  ;)  

bah tu fais ton mvc a la main comme en grand en foutant tes 3 checkboxs sur ton panel en passant par un modele tout con (ton array de fichiers modifié?)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-04-2003 à 17:19:25    

the real moins moins a écrit :

bah tu fais ton mvc a la main comme en grand en foutant tes 3 checkboxs sur ton panel en passant par un modele tout con (ton array de fichiers modifié?)


 
Mmmh disons qu'en fait on a appris a reutiliser les MVC de java (les Renderer), donc je voudrai faire de meme :)

Reply

Marsh Posté le 02-04-2003 à 19:19:59    

Bon ok, pour l'histoire des tableHeader !
En fait quand tu ajoute un JTable a un JScrollPane, il met automatiquement le TableHeader au dessus de la zone de défilement (cf tut. de sun).
Donc pour ne pas les afficher, première solution bien crade mais didactique, on met le JTable dans un JPanel, et on met le tout dans le JScrollPane, les TableHeader ne sont bien pas affichés (ouf !).
Et la deuxième solution (qui est celle à utiliser, je pense), est toute simple :  

Code :
  1. JTable table;
  2. // ... blabla initialisation tsoin tsoin
  3. table.setTableHeader(null);


et hop !


---------------
get amaroK plugin
Reply

Marsh Posté le 03-04-2003 à 09:59:53    

bobuse a écrit :

Bon ok, pour l'histoire des tableHeader !
En fait quand tu ajoute un JTable a un JScrollPane, il met automatiquement le TableHeader au dessus de la zone de défilement (cf tut. de sun).
Donc pour ne pas les afficher, première solution bien crade mais didactique, on met le JTable dans un JPanel, et on met le tout dans le JScrollPane, les TableHeader ne sont bien pas affichés (ouf !).
Et la deuxième solution (qui est celle à utiliser, je pense), est toute simple :  

Code :
  1. JTable table;
  2. // ... blabla initialisation tsoin tsoin
  3. table.setTableHeader(null);


et hop !


 
ok merci je vais voir ce que je peux faire ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed