JSpinner内で使用するEditorの縁を描画する
Total: 9
, Today: 9
, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
JSpinner
の内部で使用するEditor
コンポーネントのBorder
を描画するかを切り替えます。
Screenshot

Advertisement
Source Code Examples
JSpinner spinner = new JSpinner();
String key = "Spinner.editorBorderPainted";
JCheckBox check = new JCheckBox(key) {
@Override public void updateUI() {
super.updateUI();
UIDefaults def = UIManager.getLookAndFeelDefaults();
boolean b = def.getBoolean(key);
Object o = def.get(key);
String lnf = UIManager.getLookAndFeel().getClass().getName();
String name = lnf.substring(lnf.lastIndexOf('.') + 1);
info.append(String.format("%s: %s=%s%n", name, key, o == null ? null : b));
setSelected(b);
UIManager.put(key, b);
SwingUtilities.updateComponentTreeUI(spinner);
}
};
check.addActionListener(e -> {
JCheckBox src = (JCheckBox) e.getSource();
UIManager.put(key, src.isSelected());
SwingUtilities.updateComponentTreeUI(spinner);
});
View in GitHub: Java, KotlinDescription
UIManager.put("Spinner.editorBorderPainted", false)
JSpinner
の内部で使用するEditor
コンポーネントのBorder
を非表示JSpinner#getEditor()
で取得したDefaultEditor
からさらにDefaultEditor#getTextField()
などで取得できるJTextField
のBorder
にnull
が設定される
MetalLookAndFeel
、WindowsLookAndFeel
などのデフォルトSynthLookAndFeel
、NimbusLookAndFeel
ではSpinner.editorBorderPainted
は未設定でUIManager.getLookAndFeelDefaults()#get("Spinner.editorBorderPainted")
はnull
となり、変更しても効果がない?
UIManager.put("Spinner.editorBorderPainted", true)
JSpinner
の内部で使用するEditor
コンポーネントのBorder
を表示- 一度この
Border
を表示状態にしてから、SynthLookAndFeel
を継承するNimbusLookAndFeel
などに切り替えるとJSpinner
自体の高さが不正になる → 原因調査中NimbusLookAndFeel
ではEditor
コンポーネントにフォーカス移動でSynthBorder
の描画を変更する必要があるので、Border
にnull
が設定されるとこれを回避しようとしてサイズがおかしくなる?