Amis codeurs, bonjour,
je rencontre actuellement un problème avec le remplissage d'un tableau personnalisé qui dérive du'une jtable.
J'utilise un cellrenderer pour afficher dans chaque cellule un jpanel contenant deux jlabels (un pour du texte et un pour une image) et m'on problème est que les contenus ne s'affichent tout simplement pas. A la place, je peux lire dans les cellules des "choses" du type : [-nom de l'objet dans le lequel dans lequel sont stockées les données à affichées-@a352a... par exemple].
En espérant que vous pourrez m'aiguiller, voici mon code :
code de déclaration de ma table :
code de remplissage du tableau :
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 Vector names = new Vector(); Vector rowVector = new Vector(); HeaderColumnGroup hcg = new HeaderColumnGroup(3); names.add(hcg); ColumnGroup cg = new ColumnGroup(3, names); table = new MyTable(rowVector, cg); table.getTableHeader().setReorderingAllowed(false); table.setDefaultRenderer(Pictogram.class, new MyRenderer()); table.setShowHorizontalLines(false); table.setShowVerticalLines(false); table.setIntercellSpacing(new Dimension(10, 10)); table.setRowHeight(INITIAL_ROWHEIGHT); // table.setBackground(new Color(255,255,255)); scrollPane.setViewportView(table); table.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { Point p = e.getPoint(); int row = table.rowAtPoint(p); int column = table.convertColumnIndexToModel(table .columnAtPoint(p)); // System.out.println(table.getValueAt(row,column).toString()); } });
ma classe dérivant de jpanel dans laquelle il y aura les 2 jlabels :
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 ArrayList alPictosTh = getPictogramsForTheme(th); if (null != alPictosTh) { /* * while (table.getModel().getRowCount() > 0) { * table.deleteRow(0); } */ Vector rowsVector = new Vector(); Vector currentRow; for (int i = 0; i < alPictosTh.size(); i++) { currentRow = new Vector(); for (int j = 0; j < 3; j++) { currentRow.add(alPictosTh.get(i)); } rowsVector.add(currentRow); } table.addRow(rowsVector); }
n'hésitez pas à me demander des précisions s'il y a besoin.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public class JPanPicto extends JPanel { private JLabel labelPicto = new JLabel(); private JLabel imgPicto = new JLabel(); public JPanPicto() { super(new BorderLayout()); this.setVisible(true); } public JPanPicto(Pictogram pic){ this(); setLabelPicto(pic.getLabelPictogram()); setImgPicto(pic.getImagePictogram()); this.add(this.labelPicto, BorderLayout.SOUTH); this.add(this.imgPicto,BorderLayout.CENTER); } public JPanPicto(String labelPicto,ImageIcon imgPicto) { this(); setLabelPicto(labelPicto); setImgPicto(imgPicto); this.add(this.labelPicto, BorderLayout.SOUTH); this.add(this.imgPicto,BorderLayout.CENTER); } public JLabel getImgPicto() { return imgPicto; } public void setImgPicto(ImageIcon imgPicto) { this.imgPicto.setIcon(imgPicto); } public JLabel getLabelPicto() { return labelPicto; } public void setLabelPicto(String labelPicto) { this.labelPicto.setText(labelPicto); } }
Je ne m'en sors pas après après retourné le code dans tous les sens.
Merci d'avance et bonne journée à tous !
Partager