Bonjour tout le monde.
Je crois que j'ai simplement besoin de regard extérieur sur mon programme pour trouver la bête erreur qui m'empêche d'afficher mon JTable basé sur un JModel dynamique.
Voilà le problème: j'ai un panneau dans lequel j'ai des boutons et une table. La table, et son contenu ne doivent s'afficher qu'après avoir appuyer sur certains boutons et ensuite, si on appuie sur de nouveaux boutons, le contenu de la table doit évoluer.
J'ai donc créé un TableModel "perso" qui va chercher ses données dans un BD en fonction des boutons qui ont été cliqué dans ma fenêtre.
Après test, mon tableModel se rempli bien, et avec les bonnes données.
Cependant, impossible de faire apparaître la table ! Alors que si je mets des données statiques... (je rempli à la main 2 vecteurs...) elle s'affiche !!!
Voici mon code, dans lequel j'ai changé la création de ma table via le modèle en table créée selon 2 tableaux, que je rempli dynamiquement. La non plus, ça ne marche pas. (alors que si je mets des valeurs statiques dans ces mêmes tableaux ça marche !)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 public JPanel getDisplayPanel() { if(displayPanel == null){ displayPanel = new JPanel(new BorderLayout()); displayPanel.add(getClassPanel(), BorderLayout.NORTH); displayPanel.add(getValueTablePanel(), BorderLayout.CENTER); displayPanel.add(getButtonPanel(), BorderLayout.SOUTH); } if(domain==null){ displayPanel.setVisible(false); }else{ displayPanel.setVisible(true); } return displayPanel; } public JPanel getValueTablePanel() { if (valueTablePanel==null){ valueTablePanel = new JPanel(new BorderLayout()); JScrollPane scrollPane = new JScrollPane(getIndicatorsTable()); valueTablePanel.add(scrollPane, BorderLayout.CENTER); } if(domain==null || domainClass==null){ System.out.println("-----> valueTable.setVisible(false)"); valueTablePanel.setVisible(false); }else{ System.out.println("--------> valueTable.setVisible(true)"); valueTablePanel.setVisible(true); } return valueTablePanel; } public JTable getIndicatorsTable() { //if (indicatorsTable == null){ logicalModel = new ValueTableModel(this); Indicator[] indicators = ((ValueTableModel)logicalModel).getIndicators(); Object[] columnHeaders = new Object[((ValueTableModel)logicalModel).getColumnCount()]; if(indicators!=null){ if(indicators.length>0){ for(int i=0; i<columnHeaders.length; i++){ columnHeaders[i] = ((ValueTableModel)logicalModel).getColumnName(i); System.out.println("columnHeaders["+i+"] -> "+columnHeaders[i]); } Object[][] dataValues = new Object[((ValueTableModel)logicalModel).getRowCount()][((ValueTableModel)logicalModel).getColumnCount()]; for(int i=0; i<((ValueTableModel)logicalModel).getRowCount(); i++){ for(int j=0; j<((ValueTableModel)logicalModel).getColumnCount();j++){ if(((ValueTableModel)logicalModel).getValueAt(i, j)!=null) dataValues[i][j] = ((ValueTableModel)logicalModel).getValueAt(i, j); else dataValues[i][j] = "No value"; System.out.println("--> dataValues["+i+"]["+j+"] -> "+dataValues[i][j]); } } //SI LE MODELE SUIVANT RECOIT DEUX TABLEAUX STATIQUES... ALORS LA TABLE S'AFFICHE //POURTANT, GRACE AUX AFFICHAGES CI-DESSUS, JE SAIS QUE MES TABLEAUX ONT BIEN DES DONNEES... DefaultTableModel atm = new DefaultTableModel(dataValues, columnHeaders); //SI J'UTILISE DIRECTEMENT MON MODELE (COMME JE VOUDRAIS LE FAIRE)... BEN CA MARCHE PAS ! // indicatorsTable = new JTable(getLogicalModel()); indicatorsTable = new JTable(atm); //DANS TOUS LES CAS (SAUF AVEC DES TABLEAUX STATIQUES), //MON PANNEAU S'AFFICHE SANS SCROLLBAR, ET RESTE VIDE... (LES PANNEAUX AUTOUR S'AFFICHENT !) } } return indicatorsTable; } public TableModel getLogicalModel() { if(domain!=null && domainClass!=null){ logicalModel = new ValueTableModel(this); } if(logicalModel!=null){ System.out.println("==> nbCol : "+logicalModel.getColumnCount()+" rowCount "+logicalModel.getRowCount()+" "+logicalModel.toString()); } return logicalModel; }
Partager