将JPanels与JTable列对齐

时间:2015-07-25 09:42:05

标签: jtable jpanel dynamic-resizing

我为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不返回正在调整大小的列,而是返回上次单击的列

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

1 个答案:

答案 0 :(得分:0)

最后,我想出了一个解决方案:

  • 创建一个方法来调整Table类中的大小:此方法检索每个表列的宽度,并分别设置每个面板的宽度。
  • 向Table类添加一个组件侦听器,并在componentResized上调用该方法。

那就是它。