我有一个swing应用程序,我主要有一个Jtree和一个JTable。当应用程序启动时,树会显示一个值列表,并且该表仅显示其列名。一旦从树中选择了一个节点,就需要在表中显示与所选节点相关的一些数据。 我有一个Table模型类,它扩展了AbstractTableModel,如下所示
import javax.swing.table.AbstractTableModel;
import java.util.List;
public class PropertiesTableModel extends AbstractTableModel{
private List<Field> fieldList;
private final static String[] columnNames= new String[]{"Field","Value"};
public PropertiesTableModel(List<Field> list){
this.fieldList=list;
}
@Override
public String getColumnName(int columnIndex){
return columnNames[columnIndex];
}
@Override
public int getRowCount() {
return fieldList.size();
}
@Override
public int getColumnCount() {
return 2;
}
//this method is called to set the value of each cell
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Field field= (Field) fieldList.get(rowIndex);
switch(columnIndex){
case 0:
return field.getFieldDef().getfName();
case 1:
return field.getDefaultValue();
}
return null;
}
@Override
public Class<?> getColumnClass(int columnIndex){
switch (columnIndex){
case 0:
return String.class;
case 1:
return Object.class;
}
return null;
}
}
从另一个类我使用这个表模型如下
public void populateTableData(List<Field> list){
this.fieldList=list;
JTable propertiesTable=new JTable();
propertiesTable.setModel(new PropertiesTableModel(fieldList));
}
当我运行应用程序并从树中选择一个节点时,表中没有填充预期的数据。我确保将fieldList数据传递给TableModel,但只调用getColumnName()和getColumnCount()方法。
我想知道我的代码中是否缺少某些内容。
答案 0 :(得分:2)
如果基础数据在模型中发生变化(使用fireTableDataChanged),你可能忘记包含需要触发视图(JTable)从模型更新自身这一事实......我假设你的列表最初是空的数据被添加到列表中,并且dats不会显示在JTable中。
我可以建议你去看看GlazedLists! (http://www.glazedlists.com/)
这个免费软件库非常适合您的需求!