JTableを配置したJScrollPaneの右上コーナー区画に配置されるコンポーネントを取得する
Total: 695
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JTable
を配置したJScrollPane
の右上コーナー区画に配置されるコンポーネントを取得し、JTable
の幅よりJViewport
の幅が大きくなる場合はそれを非表示に切り替えます。
Screenshot
Advertisement
サンプルコード
// System.out.println(UIManager.get("Table.scrollPaneCornerComponent"));
JTable table = new JTable(15, 3) {
@Override public boolean getScrollableTracksViewportWidth() {
Container c = SwingUtilities.getAncestorOfClass(JScrollPane.class, this);
if (c instanceof JScrollPane) {
JScrollPane scroll = (JScrollPane) c;
Component ur = scroll.getCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER);
if (ur != null) {
ur.setVisible(
getPreferredSize().width >= scroll.getViewport().getWidth());
}
}
return super.getScrollableTracksViewportWidth();
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
View in GitHub: Java, Kotlin解説
- 上:
NimbusLookAndFeel
のデフォルトではJTable
を配置したJScrollPane
の右上コーナー区画にUIManager.put("Table.scrollPaneCornerComponent", c)
でコンポーネントが配置されているMetalLookAndFeel
やWindowsLookAndFeel
のデフォルトはnull
- 下:
JTable#getScrollableTracksViewportWidth()
メソッドをオーバーライドしてJTable
の幅(すべての列幅の合計)よりJViewport
の幅が大きくなる場合はscroll.getCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER)
で取得した右上コーナーコンポーネントを非表示に切り替えMetalLookAndFeel
やWindowsLookAndFeel
のデフォルト右上コーナーコンポーネントはnull
なので常に非表示状態