Swing/ScrollableTracksViewportWidth のバックアップの現在との差分(No.3)
- category: swing folder: ScrollableTracksViewportWidth title: JTableの幅が一定以下で水平スクロールバー、以上で列幅を自動拡張するよう設定 tags: [JTable, JScrollPane, JTableHeader] author: aterai pubdate: 2019-04-15T14:10:59+09:00 description: JTableの幅が一定以下の場合は列幅を維持して水平スクロールバーを表示し、それ以上になる場合は列幅の自動調整を実行してJTableの幅まで拡張するよう設定します。 image: https://drive.google.com/uc?id=1eCpohELZxCaXX2bowhwY668e4Ww3hn326A
概要
JTable
の幅が一定以下の場合は列幅を維持して水平スクロールバーを表示し、それ以上になる場合は列幅の自動調整を実行してJTable
の幅まで拡張するよう設定します。
Screenshot
Advertisement
サンプルコード
JTable table3 = new JTable(1, 3) {
// java - How to make JTable both AutoResize and horizontall scrollable? - Stack Overflow
// https://stackoverflow.com/questions/6104916/how-to-make-jtable-both-autoresize-and-horizontall-scrollable
@Override public boolean getScrollableTracksViewportWidth() {
// default: return !(autoResizeMode == AUTO_RESIZE_OFF);
return getPreferredSize().width < getParent().getWidth();
// no longer work correctly???
// return getPreferredSize().width < getParent().getWidth();
Container parent = SwingUtilities.getUnwrappedParent(this);
if (getPreferredSize().width < parent.getWidth()) {
setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
} else {
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
return super.getScrollableTracksViewportWidth();
}
};
View in GitHub: Java, Kotlin解説
AUTO_RESIZE_SUBSEQUENT_COLUMNS(Default)
JTable
のデフォルト-
JTable
の幅が変更された場合、列幅の合計がJTable
の幅と等しくなるよう各列を均等にサイズ変更 -
JTable
の幅が変更された場合列幅の合計がJTable
の幅と等しくなるよう各列を均等にサイズ変更
AUTO_RESIZE_OFF
-
JTable
の幅が変更されても列幅の調整は自動的に行わず、代わりに水平スクロールバーを使用 -
JTable
の幅が変更されても列幅の調整は自動的に行わず代わりに水平スクロールバーを使用
-
AUTO_RESIZE_OFF + getScrollableTracksViewportWidth()
JTable#getScrollableTracksViewportWidth()
メソッドをオーバーライドし、JTable
の幅に応じて列幅の自動調整を実行するかどうかを切り替えるよう設定-
JTable
の幅が一定以下に縮小された場合は、列幅を維持して水平スクロールバーを使用 -
JTable
の幅が一定以上に拡張された場合は、列幅の自動調整を実行して列幅の合計がJTable
の幅と等しくなるよう各列を均等にサイズ変更- このサンプルでは、
JTable
の推奨サイズの幅で切り替えている
- このサンプルでは、
-
JTable
の幅が一定以下に縮小された場合は列幅を維持して水平スクロールバーを使用 -
JTable
の幅が一定以上に拡張された場合は列幅の自動調整を実行して列幅の合計がJTable
の幅と等しくなるよう各列を均等にサイズ変更- 上記のサンプルでは
JTable
の推奨サイズ幅で切り替えるよう設定
- 上記のサンプルでは
参考リンク
- Scrollable#getScrollableTracksViewportWidth() (Java Platform SE 8)
- JTable#getScrollableTracksViewportWidth() (Java Platform SE 8)
- java - How to make JTable both AutoResize and horizontall scrollable? - Stack Overflow