Swing/AdjustRowHeightFillsViewport のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/AdjustRowHeightFillsViewport へ行く。
- title: JTableの行高がJVeiwportの高さに合うまで調整する tags: [JTable, JVewport, JScrollPane] author: aterai pubdate: 2015-07-13T02:32:20+09:00 description: JTableの各行の高さ変更することで行数などに変更があっても、JVeiwportに余白が発生しないように調整します。
概要
JTable
の各行の高さ変更することで行数などに変更があっても、JVeiwport
に余白が発生しないように調整します。
Screenshot
Advertisement
サンプルコード
JTable table = new JTable(model) {
int prevHeight = -1;
int prevCount = -1;
public void updateRowsHeigth(JViewport vport) {
int height = vport.getExtentSize().height;
int rowCount = getModel().getRowCount();
int defautlRowHeight = height / rowCount;
if ((height != prevHeight || rowCount != prevCount) && defautlRowHeight > 0) {
int over = height - rowCount * defautlRowHeight;
for (int i = 0; i < rowCount; i++) {
int a = over-- > 0 ? i == rowCount - 1 ? over : 1 : 0;
setRowHeight(i, defautlRowHeight + a);
}
}
prevHeight = height;
prevCount = rowCount;
}
@Override public void doLayout() {
super.doLayout();
Container p = SwingUtilities.getAncestorOfClass(JViewport.class, this);
if (p instanceof JViewport) {
updateRowsHeigth((JViewport) p);
}
}
};
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTable#doLayout()
をオーバーライドし、JViewport
の高さが変更されり、行数の増減があった場合、行の高さをJTable#setRowHeight(...)
で設定し直すことで、JViewport
に余白が発生しないように調整しています。