JSpinner内で使用するEditorの縁を描画する
Total: 165, Today: 1, Yesterday: 2
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が設定されるとこれを回避しようとしてサイズがおかしくなる?