Swing/TableScrollPaneBorder のバックアップ(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TableScrollPaneBorder へ行く。
- 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
Summary
JTableが配置されたJScrollPaneに適用されるBorderをまとめて変更します。
Screenshot

Advertisement
Source Code Examples
JScrollPane scroll = new JScrollPane(table);
// scroll.setBorder(new BorderUIResource(BorderFactory.createLineBorder(Color.BLUE)));
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);
}
Explanation
上記のサンプルでは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は描画されない