将 JPanel 与 JTable 列对齐

Align JPanels with JTable columns

我创建了一个额外的 header,其中包含用于 JTable 的 JPanel。每个 JPanel 的宽度应与下面 JTable 的相应列一样宽。这在宽度固定的情况下有效。但是,我希望 JTables 列的大小可以随 JPanels 宽度的动态调整而调整。 我无法让它工作。我当前的方法是扩展 DefaultTableColumnModel 覆盖 fireColumnMarginChanged 方法:

private class MyTableColumnModel extends DefaultTableColumnModel{
    @Override
    protected void fireColumnMarginChanged(){
        header.setWidth(table.getSelectedColumn(),table.getSelectedColumn()).getWidth());               
        super.fireColumnMarginChanged();
    }
}

"header" 有一个方法 setWidth(int column, int width)。但是这种方法有几个问题:

fireColumnMarginChanged 在更改列宽时一直触发,而不是在设置最终宽度时仅触发一次

table.getSelectedColumn 不是 return 正在调整大小的列,而是上次单击的列

我想知道是否有更简单的方法来动态调整大小,或者我的方法是否没有希望并且可以以某种方式修复。如果能得到任何提示,我将不胜感激。

最后想出了一个解决办法:

  • 在 Table class 中创建调整大小的方法:此方法检索每个 table 列的宽度,并分别设置每个面板的宽度。
  • 将组件监听器添加到 Table class 并在 componentResized 上调用该方法。

就是这样。