我正在考虑如何通过 JSpinner
实现可调整大小的 JTable
(我希望它是平方的)。
所以我搜索并找到了添加列的技术,例如:
TableColumn toAdd = new TableColumn();
toAdd.setHeaderValue("col1");
toAdd.setIdentifier("col1");
toAdd.setPreferredWidth("col1".length());
this.addColumn(toAdd);
this.moveColumn(this.getColumnCount() - 1, 3);
this.validate();
与删除类似:
TableColumn j = this.getColumn(0);
this.removeColumn(j);
this.validate()
但这给渲染器带来了麻烦,因为最后一列和第一列是具有特定视觉属性的索引。
我现在正在考虑销毁JTable
(或至少模型)并在每次调整大小时创建一个新的,但似乎我错过了一些东西。有人有其他想法吗?
最佳答案
不要重新创建JTable
或TableModel
。相反,扩展 AbstractTableModel
并更新模型的内部数据结构。调用fireTableStructureChanged()
会让监听表知道要渲染自己。在微调器的 ChangeListener
中调用 resize()
。
public void resize(int rows, int cols) {
init(rows, cols);
this.fireTableStructureChanged();
}
模型不必是正方形的;例如,n
by n+1
模型可让您特殊对待最后一列,例如在 system of linear equations 中。例如,如果您的模型包含 Double
的实例,请添加 renderer按类
而不是按列,并更改最后一列的颜色。
关于java - 通过 JSpinner 动态调整 JTable 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784366/