【发布时间】:2016-03-09 09:13:42
【问题描述】:
我有一个 Swing 应用程序,其中我主要有一个 Jtree 和一个 JTable。当应用程序启动时,树显示一个值列表,而表只显示其列名。一旦从树中选择一个节点,与所选节点相关的一些数据需要显示在表中。 我有一个表模型类,它扩展了 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() 方法被调用。
我想知道我的代码中是否缺少某些内容。
【问题讨论】:
-
我认为您包含的代码没有任何问题,所以问题出在其他地方。
-
为了检查方法调用,我添加了一些打印语句,但 getValueAt() 覆盖的方法甚至没有被调用。可能是什么原因
-
@Sherihan 您如何将表格添加到其滚动窗格中?如果您使用的是
scrollpane.add,请尝试将其替换为scrollpane.setViewportView(table) -
是的,之前我使用 add 方法将表格添加到滚动窗格,现在使用 setViewportView() 进行更改
标签: java swing abstracttablemodel