Bonjour,
Je cherche à réaliser une JTable dont les caractéristiques sont :
Requête 1 : Une JTable à un nombre de lignes et nombre de colonnes calculés et fixés dans un 1er JTabbledPane, précédant un 2e JTabbedPane qui la contient. Une JTable donc à nombre de lignes et nombre de colonnes immuables; non extensibles dynamiquement par des commandes ou des calculs dans ce 2e JTabbedPane.
Requête 2 : Certaines des cases de cette table contiennent ou non un radio-bouton, installé ou désinstallé programmatiquement dans un autre JTabbedPane et regroupés par ligne, en groupes indépendants l'un de l'autre. L'utilisateur de l'application n'a pour seul choix que de modifier le radio-bouton activé dans chaque ligne.
Exemple :Les cellules de cette table contiennent un objet de classe'ContCellTbl', à deux propriétés :
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 De à M1 M2 M3 M1 & M2 M1 & M3 M2 & M3 M1 & M2 & M3 0 25 25 35 ¬ O 35 50 ¬ O O 50 55 O 55 60 ¬ O O 60 70 ¬ O O O 70 80 O O 80 90 ¬ O O O 90 110 ¬ O O O O 110 115 O O O 115 120 ¬ O O O O 120 160 O O O 160 180 O O 180 230 O
- Propriété tri-états (enum) indiquant si la cellule contient un bouton radio, une chaîne de caractères ou rien du tout;
- Propriété bi-états indiquant si le bouton radio est actif ou non, ou inutile s'il ne s'agit pas d'un bouton radio.
Se basent sur cette 2e propriété et donc sur cet objet 'ContCellTbl' :
- La méthode 'public boolean isCellEditable(int row, int col)' pour déterminer si la cellule est éditable.
Dans le (1er) JTabbedPane précédant ce (2e) JTabbedPane contenant cette table
- doivent être recalculés les dimensions de celle-ci et les endroits où se trouvent un JRadioBouton, car ils sont susceptibles d'avoir été redéterminés.
- doit être réajustée la logique de détermination des cellules de 'isCellEditable (' de 'MonModèleTable' (du 2e JTabbedPane). Apparemment sans problème car dans le tutoriel de JTable il est mentionné que "The model might even generate the data at execution time".
- une nouvelle JTable doit finalement être recréée, remplaçant l'ancienne.
Swing ne prévoit pas la possibilité d'implémenter un "Listener" cellule par cellule --> en implémenter un au 2e JTabbedPane :- Il me faut encore utiliser 'TableCellEditor' puisque la valeur des cellules doit pouvoir changer puisque
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 public class TabPan_TtesCombin extends JPanel implements TableModelListener ... table_TtesCombin.getModel().addTableModelListener(this); ... @Override public void tableChanged(TableModelEvent e) { int ligne = e.getFirstRow(); int colonne = e.getColumn(); MonModeleTable_TtesCombin modele = (MonModeleTable_TtesCombin) e.getSource(); String libelleColonne = modele.getColumnName(colonne); ContCellTbl contenuCelluleTable = new ContCellTbl(); contenuCelluleTable = (ContCellTbl) modele.getValueAt(ligne, colonne); contenuCelluleTable.getRadioBouton(); // Ce qu'il faut faire de 'contenuCelluleTable' et 'libelleColonne' if (contenuCelluleTable.getRadBout_ChCar_Rien() == ContCellTbl.RadBout_ChCar_Rien.RADIOBOUTON) { System.out.println(libelleColonne + "/t" + contenuCelluleTable.getRadioBouton() + "/n"); } }
- l'utilisateur doit pouvoir modifier le bouton activé dans chaque ligne
- le programme doit pouvoir changer les endroits où se trouvent des radio-boutons
- Il me faut donc utiliser 'TableCellRenderer' puisque dans le rendeur de cellule de table, je devrais utiliser un unique 'JButtonRadio' que je devrais copier dans toutes les cellules qu'il faut. + groupage par ligne de tableau. Je ne devrais pas utiliser 'DefaultTableCellRenderer' puisque je ne dois pas faire appel à 'super.getTableCellRendererComponent'.
Quelles sont les autres points difficiles qui m'attendent ?
Un URL du code d'une réalisation semblable ?
Merci d'avance.
Partager