tags:

views:

51

answers:

1

I have a tree and a table on my panel, when I click the tree node, the table needs to change at the same time, but it doesn't. I search online and read the Java tutorial and didn't find any solutions. From some posts I think I need to use fireTableStruetureChanged(), but it just doesn't work in my code. Could anyone help me out of this? The following is the code. Thanks a ton!

public class tableStructureChange extends JFrame implements ... {
.....

/ //columnNames is a public variable, because I need to change the columns later
columnNames = new String[] {"col1","col2"}; */
data = new String[][]{
{"Mary", "Campione"},
{"Alison", "Huml"}, };

table = new JTable(new MyTableModel());
table.setAutoCreateColumnsFromModel( false );

feedback = new JScrollPane(table);  //feedback is the bottom panel

...

}

//the following class is the problem, i need the table to be reloaded
//when the class is called, but the table doesn't change at all

public void displayFeedback(String tempString) {

//create table for bottom panel
columnNames = new String[] {"col3","col4", "col5"};
String[][] data = new String[][]{
{"Mary", "Campione", "us"},
{"Alison", "Huml", "canada"}, };
//table = new JTable(data, columnNames);
//fireTableStructureChanged();   //this is the problem part

}

// my table model class MyTableModel extends AbstractTableModel { String[] columnNames = new String[] {"col1","col2"};

public int getColumnCount() {
return columnNames.length;
}

public int getRowCount() {
return data.length;
}

public String getColumnName(int col) {
return columnNames[col];
}

public Object getValueAt(int row, int col) {
return data[row][col];

}

}

... }

+2  A: 

In your method displayFeedback you seem to be hoping to replace the JTable object and have the display change to reflect what is selected in the JTree above. Instead of replacing what is in the View object, you should focus your effort on updating the Model, in this case, the AbstractTableModel subclass that you have created. There are a couple ways you can do that, but for a brute force proof of concept, you could do something like the following:

  • add a constructor to MyTableModel that takes a 2 dimensional array of data
  • in displayFeedback, create a new instance of MyTableModel that has new data relevant to the tree node that was selected.
  • call setModel on your global table variable.
akf