Swing/TableScrollPaneBorder のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TableScrollPaneBorder へ行く。
- 1 (2022-12-26 (月) 00:30:41)
- 2 (2023-07-18 (火) 14:22:42)
- category: swing folder: TableScrollPaneBorder title: JTableが配置されたJScrollPaneのBorderを変更する tags: [JTable, Border, JScrollPane, UIManager, LookAndFeel] author: aterai pubdate: 2022-12-26T00:29:57+09:00 description: JTableが配置されたJScrollPaneに適用されるBorderをまとめて変更します。 image: https://drive.google.com/uc?id=1xoD1g3KbpKqnDrtB-PKy5XMrZzAjsynn
概要
JTable
が配置されたJScrollPane
に適用されるBorder
をまとめて変更します。
Screenshot
Advertisement
サンプルコード
JScrollPane scroll = new JScrollPane(table);
// scroll.setBorder(new BorderUIResource(BorderFactory.createLineBorder(Color.BLUE, 5)));
String key = "Table.scrollPaneBorder";
JCheckBox check = new JCheckBox(key, Objects.nonNull(UIManager.getBorder(key))) {
@Override public void updateUI() {
super.updateUI();
boolean b = Objects.nonNull(UIManager.getLookAndFeelDefaults().getBorder(key));
updateTableScrollPane(scroll, key, b);
setSelected(b);
}
};
check.addActionListener(e -> {
boolean b = ((JCheckBox) e.getSource()).isSelected();
updateTableScrollPane(scroll, key, b);
});
// ...
public static void updateTableScrollPane(Component scroll, String key, boolean lnf) {
Border border;
if (lnf) {
border = UIManager.getLookAndFeelDefaults().getBorder(key);
} else {
border = new BorderUIResource(BorderFactory.createEmptyBorder());
}
UIManager.put(key, border);
SwingUtilities.updateComponentTreeUI(scroll);
}
View in GitHub: Java, Kotlin解説
上記のサンプルではUIManager.put("Table.scrollPaneBorder", ...)
を使用してJTable
が配置されたJScrollPane
に適用されるBorder
をLookAndFeel
固有のBorder
と空のBorderFactory.createEmptyBorder()
で切り替えるテストを実行しています。
UIManager.put("Table.scrollPaneBorder", ...)
で適用されるBorder
は個別のJScrollPane
のJScrollPane#setBorder(...)
で変更可能なBorder
となるNimbusLookAndFeel
のUIManager.getLookAndFeelDefaults().getBorder("Table.scrollPaneBorder")
で取得できるBorder
はnull
だが、JScrollPane
のBorder
は別のPainter
で描画されるMotifLookAndFeel
のUIManager.getLookAndFeelDefaults().getBorder("Table.scrollPaneBorder")
で取得できるBorder
はnull
でJScrollPane
のBorder
は描画されない