• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JComboBoxをJSpinnerの代わりに使用する
#navi(../)
#tags(JSpinner, JComboBox, Html, ActionMap)
RIGHT:Posted by &author(aterai); at 2013-04-29
*JComboBoxをJSpinnerの代わりに使用する [#f7106526]
``JSpinner``の代わりに``JComboBox``を使用することで、アイテムの文字色などを変更しています。
---
title: JComboBoxをJSpinnerの代わりに使用する
tags: [JSpinner, JComboBox, Html, ActionMap]
author: aterai
pubdate: 2013-04-29T08:31:48+09:00
description: JSpinnerの代わりにJComboBoxを使用することで、アイテムの文字色などを変更しています。
---
* 概要 [#f7106526]
`JSpinner`の代わりに`JComboBox`を使用することで、アイテムの文字色などを変更しています。

-&jnlp;
-&jar;
-&zip;
#download(https://lh6.googleusercontent.com/-kpruQCgOnLE/UX2r6exfrII/AAAAAAAABqo/JZnFlTBy1zw/s800/SpinnerTextColor.png)

//#screenshot
#ref(https://lh6.googleusercontent.com/-kpruQCgOnLE/UX2r6exfrII/AAAAAAAABqo/JZnFlTBy1zw/s800/SpinnerTextColor.png)

**サンプルコード [#xf53f1ef]
* サンプルコード [#xf53f1ef]
#code(link){{
JButton nb = createArrowButton(SwingConstants.NORTH);
nb.addActionListener(new ActionListener() {
  @Override public void actionPerformed(ActionEvent e) {
    e.setSource(comboBox);
    comboBox.getActionMap().get("selectPrevious2").actionPerformed(e);
  }
});
JButton sb = createArrowButton(SwingConstants.SOUTH);
sb.addActionListener(new ActionListener() {
  @Override public void actionPerformed(ActionEvent e) {
    e.setSource(comboBox);
    comboBox.getActionMap().get("selectNext2").actionPerformed(e);
  }
});
Box box = Box.createVerticalBox();
box.add(nb);
box.add(sb);

JPanel p = new JPanel(new BorderLayout()) {
  @Override public Dimension getPreferredSize() {
    Dimension d = super.getPreferredSize();
    return new Dimension(d.width, 20);
  }
};
p.add(comboBox);
p.add(box, BorderLayout.EAST);
}}

**解説 [#c462037c]
上記のサンプルでは、ドロップダウンリストを無効(表示させない)にした``JComboBox``と``2``つの``ArrowButton``を組み合わせて、``JSpinner``風のコンポーネントを作成しています。各アイテムの文字色は、``Html``の``<font>``タグを使って変更しています。
* 解説 [#c462037c]
上記のサンプルでは、ドロップダウンリストを無効(表示させない)にした`JComboBox`と`2`つの`ArrowButton`を組み合わせて、`JSpinner`風のコンポーネントを作成しています。各アイテムの文字色は、`Html`の`<font>`タグを使って変更しています。

- ``BasicComboBoxUI#createArrowButton()``をオーバーライドして、``JComboBox``の元``ArrowButton``を非表示
- `BasicComboBoxUI#createArrowButton()`をオーバーライドして、`JComboBox`の元`ArrowButton`を非表示
-- [[JComboBoxのArrowButtonを隠す>Swing/HideComboArrowButton]]
- ``BasicComboBoxUI#setPopupVisible``、``BasicComboBoxUI#createPopup()``、``BasicComboPopup#show()``などをオーバーライドしてドロップダウンリストを無効化
- ``JComboBox#getActionMap()#get("selectNext2")``などで取得したアクションを実行する``ArrowButton``を作成してレイアウト
- `BasicComboBoxUI#setPopupVisible`、`BasicComboBoxUI#createPopup()`、`BasicComboPopup#show()`などをオーバーライドしてドロップダウンリストを無効化
- `JComboBox#getActionMap()#get("selectNext2")`などで取得したアクションを実行する`ArrowButton`を作成してレイアウト
-- [[JTableを別コンポーネントから操作>Swing/SelectAllButton]]
-- [[JComponentのKeyBinding一覧を取得する>Swing/KeyBinding]]
-- リピート機能には未対応

//**参考リンク
**コメント [#ecf8bf9c]
//* 参考リンク
* コメント [#ecf8bf9c]
#comment
#comment