【问题标题】:JTable: changing column based on outside inputJTable:根据外部输入更改列
【发布时间】:2016-11-07 15:01:50
【问题描述】:

我有一个扩展 JTable 的自定义表格类。我希望基于复选框的列可见/不可见。我在复选框上有一个动作监听器,可以更改正在运行的列的最大、最小和首选宽度。

当复选框未被选中时,我将最小/最大/首选宽度设置为 0。当它被选中时,我将最小/最大/首选宽度设置为正常大小。

我的问题是,当我单击选中复选框时,表格没有改变。我没有看到专栏。但是,当我调整应用程序或任何表格列的大小时,表格会更新并且我的新列现在可以正常显示。

我尝试调用“table.repaint()”,但没有任何效果。我现在理想的方法是找出导致更新的应用程序/列调整大小期间调用的内容,然后从我的侦听器中调用它。

【问题讨论】:

  • 发布minimal reproducible example,以便我们了解您的所作所为
  • 与其更改 view,不如考虑在 Model 上进行更改 - 您可以通过创建两个 TableModel 来实现,每个类型一个,然后相应地更改 JTable 模型
  • when I resize the application or any of table columns, the table gets updated and my new column is now visible properly. 你需要让 LayoutManager 知道发生了变化。尝试致电revalidate,但请考虑我上面评论中的替代方案

标签: java swing resize jtable tablecolumn


【解决方案1】:

我在复选框上有一个动作监听器,它可以更改正在运行的列的最大、最小和首选宽度。

不要玩弄列大小。该列仍将是表格的一部分,并且当用户在列之间切换时会混淆用户,因为光标将在最小化列上消失。

相反,您想从表视图中删除该列。所以你需要从表的TableColumnModel 中删除一个TableColumn

查看Table Column Manager。这允许您根据需要隐藏/显示列。

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多