JTableが配置されたJScrollPaneのBorderを変更する
Total: 866
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTable
が配置されたJScrollPane
に適用されるBorder
をまとめて変更します。
Screenshot
Advertisement
サンプルコード
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, 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
は描画されない