我正在使用 DefaultTableModel 的扩展,如下所示:
这是更新后的新成就表模型以反映某些答案的输入。
public AchievementTableModel(Object[][] c, Object[] co) {
super(c,co);
}
public boolean isCellEditable(int r, int c) {return false;}
public void replace(Object[][] c, Object[] co) {
setDataVector(convertToVector(c), convertToVector(co));
fireTableDataChanged();
}
我的 GUI 是一个具有以下属性的 JTable:
if(table==null)
table = new JTable(model);
else
table.setModel(model);
table.setFillsViewportHeight(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.getTableHeader().setReorderingAllowed(false);
table.getTableHeader().setResizingAllowed(false);
table.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
table.getColumnModel().setColumnSelectionAllowed(false);
我有一个 JComboBox 可以选择要显示的数据。TableModel 通过调用 model.replace(cells) 进行更新,然后再次运行上述表格创建代码。
在 GUI JTable 中选择一行并打印 table.getSelectedRow() 值时,即使我重新选择了第一个 JComboBox选项。我失踪有什么原因吗?我应该更改一些代码吗?
编辑:代码在尝试回答这个问题时发生了很大变化,所以这里是更新的代码。新的成就表模型在上面。
这将设置模型和表以正确查看并显示在 ScrollPane 中
if(model==null)
model = new AchievementTableModel(cells, columns);
else
model.replace(cells, columns);
if(table==null) {
table = new JTable(model);
table.setFillsViewportHeight(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
table.getColumnModel().setColumnSelectionAllowed(false);
table.getTableHeader().setResizingAllowed(false);
} else
table.setModel(model);
column = table.getColumn(columns[0]);
column.setPreferredWidth(25);
column = table.getColumn(columns[1]);
column.setPreferredWidth(225);
column = table.getColumn(columns[2]);
column.setPreferredWidth(40);
table.doLayout();
add(new JScrollPane(table), BorderLayout.CENTER);