2017-09-04 6 views
0

D'abord, je l'ai créé JSplitPane:ne marche pas JTable show

JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT ,new JScrollPane(textArea), new JScrollPane(table)); 
add(splitPane);//added to frame 

j'ai créé la table avec le modèle par défaut:

DefaultTableModel model = new DefaultTableModel(columns, 0); 
JTable table = new JTable(model); 

dans lequel je définir ces valeurs comme tableau de Colum: A B C D E F P1 P2 R1 R2 R3 S1 S2.

Le problème est quand je plus tard, après une action (en action listener) essayer d'ajouter des données avec ce code:

model.addRow(parts); 

où les pièces sont (comme tableau):

3.0 2.0 5.0 4.0 6.0 1.0 4.0 1.0 -4.0 -30.0 5.0 -1.0 -6.0 
6.0 1.0 3.0 2.0 5.0 4.0 0.5 -5.5 0.75 -38.5 7.0 1.5 -5.5 

montre textarea correctement, mais pas la table. Je ne sais pas ce que je fais mal, j'ai suivi ce tutoriel https://docs.oracle.com/javase/tutorial/uiswing/components/table.html mais cela n'aide pas.

P.S. Si je mets table = new JTable(10,10) juste après l'initialisation du splitPane, il s'affiche normalement dans le volet fractionné.

Répondre

1

La variable de table est null lorsque vous l'ajoutez au volet fractionné. Aucun composant n'a donc été ajouté au volet fractionné.

Vous ne pouvez pas ensuite créer une instance de JTable. Bien sûr, la variable "table" peut maintenant contenir une référence à la JTable, mais vous n'avez pas réellement ajouté la table au volet fractionné.

Vous pouvez uniquement ajouter la table au volet fractionné APRÈS avoir créé la table JTable.

Ainsi, le code doit être quelque chose comme:

table = new JTable(column, 0); 
JSplitPane splitPane = new JSplitPane(... , new JScrollPane(textArea), new JScrollPane(table)); 

plus tard dans votre code, vous pouvez utiliser:

DefaultTableModel model = (DefaultTableModel)table.getModel(); 
model.addRow(...);