java - 通过 JSpinner 动态调整 JTable 的大小

标签 java swing resize jtable

我正在考虑如何通过 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(或至少模型)并在每次调整大小时创建一个新的,但似乎我错过了一些东西。有人有其他想法吗?

最佳答案

不要重新创建JTableTableModel。相反,扩展 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/

相关文章:

java - 根据用户输入集查询数据库 - JAVA

java - 无法向我的 JPanel 添加任何内容

arrays - 如何创建未知大小的多维数组?

c++ - 在 C++ 中调整文件大小

java - 适用于 Android 的 ImageResizer 库

java - 如何在我的 Ant 构建中包含外部 jar 库

java - 如果我们从 java 中删除已检查的异常会发生什么?

java - JFrame 为空

java - HTTP 状态 500 - 内部服务器错误 - JSP - Glass Fish 服务器

java - 无法在jframe上绘制字符串