2010-02-02 2 views
0

У меня есть дерево и таблица на моей панели, когда я нажимаю узел дерева, таблица должна меняться одновременно, но это не так. Я ищу в Интернете и читаю учебник по Java и не нашел никаких решений. Из некоторых сообщений я думаю, что мне нужно использовать fireTableStruetureChanged(), но он просто не работает в моем коде. Может ли кто-нибудь помочь мне в этом? Ниже приведен код. Благодаря тонну!Java JTable restructure/reload/refresh

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 

} 

// мой стол модель класс MyTableModel расширяет AbstractTableModel { String [] columnNames = новый 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]; 

} 

} 

... }

+0

Не могли бы вы попробовать и вырезать ненужные данные в своем коде, чтобы мы могли сосредоточиться на реальных проблемных областях? – jjnguy

+0

Привет, Джастин, Спасибо за ваш ответ. Я отредактировал код и оставил там соответствующий код. Может помочь мне взглянуть на это. Большое спасибо !! – blueigloo3

ответ

3

В вашем методе вы, кажется, в надежде заменить JTable объект и есть изменение экрана, чтобы отразить то, что выбран в приведенном выше JTree. Вместо замены того, что находится в объекте View, вы должны сфокусировать свое внимание на обновлении модели, в данном случае, подкласса AbstractTableModel, который вы создали. Есть несколько способов вы можете сделать это, но для грубой силы доказательство концепции, вы могли бы сделать что-то вроде следующего:

  • добавить конструктор MyTableModel, который принимает 2 одномерный массив data
  • в displayFeedback, создайте новый экземпляр MyTableModel, который имеет новые данные, относящиеся к выбранному узлу дерева.
  • звонок setModel на ваш глобальный table переменная.