Bonjour,
Je souhaiterais modifier la 1er colonne d'une JTable pour que celle-ci affiche 2 objets : un objet personnel héritant de JPanel permettant d'afficher un petit carré coloré et une Chaine de caractéres.
Ces deux objets sont déduit via un 3em, connu, de type Layer. C'est donc ce dernier que je vais utiliser pour mon DefaultTableCellRenderer.
Aprés de nombreuses recherches sur le internet, voilà ce que j'ai réussi à faire.
Création de l'objet JTablePerso dans le code principal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 String[] titreColonnesCoucheSupplementaire = new String[]{"Nom de la couche"}; this.jTableCouchesSupplementaires = new JTablePerso(titreColonnesCoucheSupplementaire); for (int i=0;i<nbrCouche;i++){ nomCouche = this.layerManager.getLayer(i).toString().trim(); //On récupére le nom de la couche, qui correspond à la seconde information que je souhaiterais afficher. if ((!(nomCouche.equals("Ilots"))) &&(!(nomCouche.equals("Parcelles")))){ jTableCouchesSupplementaires.setValueAt(this.layerManager.getLayer(i), numLigne, 0); //J'affecte à la premiere colonne la couche (layer) qui va me permettre de récupérer les 2 informations voulues. numLigne = numLigne + 1; this.vectorCouchesSupplementaires.add(this.layerManager.getLayer(i)); } } jTableCouchesSupplementaires.setDefaultRenderer(Object.class,new TableRendererPerso()); //Je choisi mon DefaultTableCellRenderer.
Mon DefaultTableCellRenderer
Le problème et que le panel s'est je pense pas le bon componant à utiliser : en effet cela n'affiche plus qu'un seul bloc dans le tableau, et l'affichage n'est pas parfait (coupé à la moitié de la hauteur).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 class TableRendererPerso extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){ Layer couche = (Layer)value; //Je récupére la couche qui va me permettre de récupérer les 2 informations JPanel panelCouche = new JPanel();//JPanel qui va accueillir le petit carré coloré (1er info) JPanel panelNomCouche = new JPanel();//JPanel qui va accueillir le label du nom de la couche (2nd info) JLabel labelNomCouche = new JLabel();//JLabel qui va recevoir le nom de la couche et qui va être affiché dans panelNomCouche. JPanel panelPrincipal = new JPanel();//JPanel qui va recevoir les 2 précédents panels. //Je récupére le petit carré (1ere info grâce à la couche) LayerPreviewStylePanel previewPanel = new LayerPreviewStylePanel(); previewPanel.init(couche); previewPanel.setVisible(true); //Et j'ajoute l'info et son panel dans le panel principal. panelCouche.add(previewPanel); panelPrincipal.add(panelCouche); //Je récupére le nopm de la couche (2em info) labelNomCouche.setText(((Layer)value).toString()); //Et j'ajoute l'info et son panel dans le panel principal. panelNomCouche.add(labelNomCouche); panelPrincipal.add(panelNomCouche); //Enfin, je retourne le panelPrincipal return panelPrincipal; }
Je vous sollicite donc afin de pouvoir réussir à afficher des cellules normales contenant à la fois le petit carré coloré et le nom de la couche.
Merci beaucoup.
Partager