JTableが配置されたJScrollPaneのBorderを変更する
Total: 1137, Today: 1, Yesterday: 0
Posted by aterai at
Last-modified:
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);
}
View in GitHub: Java, KotlinDescription
上記のサンプルでは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は描画されない