---
category: swing
folder: HtmlSpinnerEditor
title: JSpinnerのエディタをJLabelに変更してHTMLを表示する
tags: [JSpinner, HTML]
author: aterai
pubdate: 2018-04-09T14:48:47+09:00
description: JSpinnerのListEditorをJLabelに変更してテキストをHTMLで表示します。
image: https://drive.google.com/uc?id=1SC3ViNpsTsIE2fgR1wtXawwKHpOD8P1PYg
---
* Summary [#summary]
`JSpinner`の`ListEditor`を`JLabel`に変更してテキストを`HTML`で表示します。
#download(https://drive.google.com/uc?id=1SC3ViNpsTsIE2fgR1wtXawwKHpOD8P1PYg)
* Source Code Examples [#sourcecode]
#code(link){{
class HtmlListEditor extends JLabel implements ChangeListener {
protected HtmlListEditor(JSpinner spinner) {
super();
if (!(spinner.getModel() instanceof SpinnerListModel)) {
throw new IllegalArgumentException("model not a SpinnerListModel");
}
spinner.addChangeListener(this);
setText(Objects.toString(spinner.getValue()));
setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
setOpaque(true);
setBackground(Color.WHITE);
setInheritsPopupMenu(true);
String toolTipText = spinner.getToolTipText();
if (Objects.nonNull(toolTipText)) {
setToolTipText(toolTipText);
}
}
@Override public void stateChanged(ChangeEvent e) {
JSpinner spinner = (JSpinner) e.getSource();
setText(Objects.toString(spinner.getValue()));
}
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
d.width = 200;
return d;
}
// @see javax/swing/JSpinner.DefaultEditor.html#dismiss(JSpinner)
public void dismiss(JSpinner spinner) {
spinner.removeChangeListener(this);
}
}
}}
* Description [#explanation]
* Description [#description]
- `ListEditor(default)`
-- デフォルトの`ListEditor`を使用
-- エディタは`JFormattedTextField`なので`HTML`タグは使用不可
- `HtmlListEditor`
-- `JLabel`を継承する`HtmlListEditor`を作成して`JSpinner#setEditor(...)`で設定
-- `JLabel`がエディタになるので`HTML`タグが使用可能
-- このエディタは`JSpinner.DefaultEditor`を継承していないため`JSpinner#setEditor(...)`で`JSpinner`に設定する場合は以下のように`JSpinner#removeChangeListener(...)`を呼んで`ChangeListener`を除去する必要がある
#code{{
JSpinner spinner = new JSpinner(new SpinnerListModel(items)) {
@Override public void setEditor(JComponent editor) {
JComponent oldEditor = getEditor();
if (!editor.equals(oldEditor) && oldEditor instanceof HtmlListEditor) {
((HtmlListEditor) oldEditor).dismiss(this);
}
super.setEditor(editor);
}
};
}}
* Reference [#reference]
- [http://www.java2s.com/Tutorials/Java/Swing_How_to/JSpinner/Create_custom_renderer_for_JSpinner_to_show_customized_content_icons.htm Java Swing How to - Create custom renderer for JSpinner to show customized content icons]
- [[JComboBoxをJSpinnerの代わりに使用する>Swing/SpinnerTextColor]]
-- `JComboBox`を使用することで同様に`HTML`を表示可能だが`LookAndFeel`が変化してしまう
* Comment [#comment]
#comment
#comment