Swing/SpinnerTextColor のバックアップの現在との差分(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/SpinnerTextColor へ行く。
- 1 (2013-04-29 (月) 08:31:48)
- 2 (2015-10-13 (火) 20:06:28)
- 3 (2017-04-12 (水) 18:56:21)
- 4 (2018-03-28 (水) 18:18:34)
- 5 (2018-04-02 (月) 18:32:17)
- 6 (2018-04-04 (水) 21:33:15)
- 7 (2018-04-09 (月) 14:54:35)
- 8 (2018-04-19 (木) 13:49:19)
- 9 (2018-04-20 (金) 17:21:35)
- 10 (2020-04-12 (日) 01:37:28)
- 11 (2021-10-19 (火) 13:00:03)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: SpinnerTextColor title: JComboBoxをJSpinnerの代わりに使用する tags: [JSpinner, JComboBox, Html, ActionMap] 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 --- * 概要 [#f7106526] * 概要 [#summary] `JSpinner`の代わりに`JComboBox`を使用することで、アイテムの文字色などを変更しています。 #download(https://lh6.googleusercontent.com/-kpruQCgOnLE/UX2r6exfrII/AAAAAAAABqo/JZnFlTBy1zw/s800/SpinnerTextColor.png) * サンプルコード [#xf53f1ef] * サンプルコード [#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); }} * 解説 [#c462037c] 上記のサンプルでは、ドロップダウンリストを無効(表示させない)にした`JComboBox`と`2`つの`ArrowButton`を組み合わせて、`JSpinner`風のコンポーネントを作成しています。各アイテムの文字色は、`Html`の`<font>`タグを使って変更しています。 * 解説 [#explanation] 上記のサンプルでは、ドロップダウンリストの表示を無効にした`JComboBox`と`2`つの`ArrowButton`を組み合わせて、`JSpinner`風のコンポーネントを作成しています。`JComboBox`のデフォルトセルレンダラーは`JLabel`を継承していて`Html`タグが使用可能なので、各アイテムの文字色を`<font>`タグで部分的に変更しています。 - `BasicComboBoxUI#createArrowButton()`をオーバーライドして、`JComboBox`の元`ArrowButton`を非表示 - `BasicComboBoxUI#createArrowButton()`メソッドをオーバーライドして`JComboBox`の`ArrowButton`を非表示に設定 -- [[JComboBoxのArrowButtonを隠す>Swing/HideComboArrowButton]] - `BasicComboBoxUI#setPopupVisible`、`BasicComboBoxUI#createPopup()`、`BasicComboPopup#show()`などをオーバーライドしてドロップダウンリストを無効化 - `BasicComboBoxUI#setPopupVisible(...)`、`BasicComboBoxUI#createPopup()`、`BasicComboPopup#show()`メソッドなどをオーバーライドしてドロップダウンリストを無効化 - `JComboBox#getActionMap()#get("selectNext2")`などで取得したアクションを実行する`ArrowButton`を作成してレイアウト -- [[JTableを別コンポーネントから操作>Swing/SelectAllButton]] -- [[JComponentのKeyBinding一覧を取得する>Swing/KeyBinding]] -- リピート機能には未対応 - ボタンをクリックしたままの場合、値変更が繰り返し実行されるリピート機能には未対応 -- [[JButtonがマウスで押されている間、アクションを繰り返すTimerを設定する>Swing/AutoRepeatTimer]] //* 参考リンク * コメント [#ecf8bf9c] * 参考リンク [#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