JTable 隐藏和显示列

2022-09-05 00:11:40

我想向表中添加一些列(Swing JTable)。其中一些将具有默认大小(例如250),其他将隐藏(因此它们的大小将为0)。我用这个代码:

 model = new DefaultTableModel();
 table = new JTable(model);
 setAutoResizeMode(AUTO_RESIZE_OFF);
 for (int i = 1; i < COLUMN_NAMES.length; i++) {
    model.addColumn(COLUMN_NAMES[i]);
    if (show[i]) show(index);
    else hide(index);
 }
 ........

 private void hide(int index) {
    TableColumn column = getColumnModel().getColumn(index);
    column.setMinWidth(0);
    column.setMaxWidth(0);
    column.setWidth(0);
    column.setPreferredWidth(0);
    doLayout();
}

private void show(int index) {
    final int width = 250;
    column.setMinWidth(15);
    column.setMaxWidth(width);
    column.setWidth(width);
    column.setPreferredWidth(width);
    doLayout();
}

问题是当显示表格时,显示所有列(没有一个是隐藏的),它们的大小不是250,但它们的大小都相同。

我怎样才能获得想要的效果?


答案 1

我认为您命名方法不正确,当您想要隐藏列时,您将设置

column.setMinWidth(0);
column.setMaxWidth(0);
column.setPreferredWidth(0);

但是在你的代码中,当你想要显示一个完全相反的列时,你正在这样做。

此外,无需在 TableColumn 上调用此“setWidth”方法,请阅读 TableColumn#setWidth(int)。


答案 2

JTable#removeCollumn 仅从 JTable 视图中删除列,此示例中的更多内容


推荐