将 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 上调用该方法。
就是这样。
我创建了一个额外的 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 上调用该方法。
就是这样。