Bonjour,
J'ai une JTable qui contient dans la derniere colonne plusieurs JPanel. Chaque JPanel contient 2 JButton.
Tout s'affiche comme souhaité, mais on ne peut plus interagir avec les bouttons comme c'était le cas quand ils étaient en-dehors de la JTable.
Un peu de code:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 // ma classe qui est en fait mon panneau principal public class PanneauAccess extends JPanel { // constructeur public PanneauAccess() { super(new GridLayout(0, 1)); //Les titres des colonnes String title[] = {"", "Number", "Date", "Status", "Qty", "Price", "Supplier", ""}; // panneaux de navigation JPanel panneauSIB = new JPanel(new FlowLayout()); panneauSIB.add(precedentCdeSIB); panneauSIB.add(suivantCdeSIB); panneauSIB.add(nbCdeSIB); panneauSIB.add(new JLabel("/")); panneauSIB.add(nbTotCdeSIB); JPanel paneauLSC = new JPanel(new FlowLayout()); paneauLSC.add(precedentCdeLSC); paneauLSC.add(suivantCdeLSC); paneauLSC.add(nbCdeLSC); paneauLSC.add(new JLabel("/")); paneauLSC.add(nbTotCdeLSC); JPanel paneauAG = new JPanel(new FlowLayout()); paneauAG.add(precedentCdeAG); paneauAG.add(suivantCdeAG); paneauAG.add(nbCdeAG); paneauAG.add(new JLabel("/")); paneauAG.add(nbTotCdeAG); JPanel paneauMims = new JPanel(new FlowLayout()); paneauMims.add(precedentCdeMims); paneauMims.add(suivantCdeMims); paneauMims.add(nbMims); paneauMims.add(new JLabel("/")); paneauMims.add(nbTotMims); Object[][] data = { {champsOracleSIB, champsNumberSIB, champsDateSIB, champsStatutSIB, champsQteCommandeSIBRes, champsPrixSIB, champsSupplierSIB, panneauSIB }, {champsOracleLSC, champsNumberLSCRes, champsDateLSCRes, champsStatutLSC, champsQteLSCRes, champsPrixLSCRes, champsSupplierLSCRes, paneauLSC}, {champsOracleAG, champsNumberAGRes, champsDateAGRes, "", champsQteAGRes, champsPrixAGRes, champsSupplierAGRes, paneauAG}, {champsOracleMims, champsNumberMimsRes, champsDateMimsRes, "", champsQteMimsRes, champsPrixMimsRes, champsSupplierMimsRes, paneauMims}}; ModeleTableau modele = new ModeleTableau(data, title); JTable tableau = new JTable(modele); tableau.setRowHeight(30); tableau.setGridColor(Color.blue); tableau.setDefaultRenderer(JLabel.class, new TableComponent()); tableau.setDefaultRenderer(JButton.class, new TableComponent()); tableau.setDefaultRenderer(JPanel.class, new TableComponent()); //On indique que l'entête doit être au nord, donc au-dessus add(tableau.getTableHeader(), BorderLayout.NORTH); //Et le corps au centre ! add(tableau, BorderLayout.CENTER); } }
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
49
50
51
52
53
54
55
56
57 public class ModeleTableau extends AbstractTableModel { private Object[][] data; private String[] title; /** * Constructeur * @param data * @param title */ public ModeleTableau(Object[][] data, String[] title){ this.data = data; this.title = title; } /* (non-Javadoc) * @see javax.swing.table.TableModel#getColumnCount() */ @Override public int getColumnCount() { return this.title.length; } /* (non-Javadoc) * @see javax.swing.table.TableModel#getRowCount() */ @Override public int getRowCount() { return this.data.length; } /* (non-Javadoc) * @see javax.swing.table.TableModel#getValueAt(int, int) */ @Override public Object getValueAt(int row, int col) { return this.data[row][col]; } /** * Retourne le titre de la colonne à l'indice spécifé */ public String getColumnName(int col) { return this.title[col]; } /** * Retourne la classe de la donnée de la colonne * @param col */ public Class getColumnClass(int col){ //On retourne le type de la cellule à la colonne demandée //On se moque de la ligne puisque les données sur chaque ligne sont les mêmes //On choisit donc la première ligne return this.data[0][col].getClass(); } }Quelqu'un aurait-il une idée?
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 public class TableComponent extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // si la valeur de la cellule est un JLabel ou un JButton // on transtype notre valeur if (value instanceof JLabel){ return (JLabel) value; } else if (value instanceof JButton){ return (JButton) value; } else if (value instanceof JPanel){ return (JPanel) value; } else { return this; } } }
Partager