Swing/SpinnerTextColor の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/SpinnerTextColor へ行く。
- Swing/SpinnerTextColor の差分を削除
--- category: swing folder: SpinnerTextColor title: JComboBoxをJSpinnerの代わりに使用する tags: [JSpinner, JComboBox, ListCellRenderer, Html, ActionMap] author: aterai pubdate: 2013-04-29T08:31:48+09:00 description: JSpinnerの代わりにJComboBoxを使用することで、アイテムの文字色などを変更しています。 image: https://lh6.googleusercontent.com/-kpruQCgOnLE/UX2r6exfrII/AAAAAAAABqo/JZnFlTBy1zw/s800/SpinnerTextColor.png --- * 概要 [#summary] `JSpinner`の代わりに`JComboBox`を使用することで、アイテムの文字色などを変更しています。 #download(https://lh6.googleusercontent.com/-kpruQCgOnLE/UX2r6exfrII/AAAAAAAABqo/JZnFlTBy1zw/s800/SpinnerTextColor.png) * サンプルコード [#sourcecode] #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); } nb.addActionListener(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); } sb.addActionListener(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); }} * 解説 [#explanation] 上記のサンプルでは、ドロップダウンリストの表示を無効にした`JComboBox`と`2`つの`ArrowButton`を組み合わせて、`JSpinner`風のコンポーネントを作成しています。`JComboBox`のデフォルトセルレンダラーは`JLabel`を継承していて`Html`タグが使用可能なので、各アイテムの文字色を`<font>`タグで部分的に変更しています。 - `BasicComboBoxUI#createArrowButton()`メソッドをオーバーライドして`JComboBox`の`ArrowButton`を非表示に設定 -- [[JComboBoxのArrowButtonを隠す>Swing/HideComboArrowButton]] - `BasicComboBoxUI#setPopupVisible(...)`、`BasicComboBoxUI#createPopup()`、`BasicComboPopup#show()`メソッドなどをオーバーライドしてドロップダウンリストを無効化 - `JComboBox#getActionMap()#get("selectNext2")`などで取得したアクションを実行する`ArrowButton`を作成してレイアウト -- [[JTableを別コンポーネントから操作>Swing/SelectAllButton]] -- [[JComponentのKeyBinding一覧を取得する>Swing/KeyBinding]] - ボタンをクリックしたままの場合、値変更が繰り返し実行されるリピート機能には未対応 -- [[JButtonがマウスで押されている間、アクションを繰り返すTimerを設定する>Swing/AutoRepeatTimer]] * 参考リンク [#reference] - [[JComboBoxのArrowButtonを隠す>Swing/HideComboArrowButton]] - [[JTableを別コンポーネントから操作>Swing/SelectAllButton]] - [[JComponentのKeyBinding一覧を取得する>Swing/KeyBinding]] - [[JButtonがマウスで押されている間、アクションを繰り返すTimerを設定する>Swing/AutoRepeatTimer]] - [[JSpinnerのエディタをJLabelに変更してHTMLを表示する>Swing/HtmlSpinnerEditor]] -- `JSpinner`の`Editor`を`JFormattedTextField`から`JLabel`に変更して同様の文字色変更を行うサンプル * コメント [#comment] #comment #comment