Swing/SpinnerTextColor のバックアップ(No.11)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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, ListCellRenderer, Html, ActionMap] author: aterai pubdate: 2013-04-29T08:31:48+09:00 description: JSpinnerの代わりにJComboBoxを使用することで、アイテムの文字色などを変更しています。 image:
概要
JSpinner
の代わりにJComboBox
を使用することで、アイテムの文字色などを変更しています。
Screenshot
Advertisement
サンプルコード
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);
View in GitHub: Java, Kotlin解説
上記のサンプルでは、ドロップダウンリストの表示を無効にしたJComboBox
と2
つのArrowButton
を組み合わせて、JSpinner
風のコンポーネントを作成しています。JComboBox
のデフォルトセルレンダラーはJLabel
を継承していてHtml
タグが使用可能なので、各アイテムの文字色を<font>
タグで部分的に変更しています。
BasicComboBoxUI#createArrowButton()
メソッドをオーバーライドしてJComboBox
のArrowButton
を非表示に設定BasicComboBoxUI#setPopupVisible(...)
、BasicComboBoxUI#createPopup()
、BasicComboPopup#show()
メソッドなどをオーバーライドしてドロップダウンリストを無効化JComboBox#getActionMap()#get("selectNext2")
などで取得したアクションを実行するArrowButton
を作成してレイアウト- ボタンをクリックしたままの場合、値変更が繰り返し実行されるリピート機能には未対応
参考リンク
- JComboBoxのArrowButtonを隠す
- JTableを別コンポーネントから操作
- JComponentのKeyBinding一覧を取得する
- JButtonがマウスで押されている間、アクションを繰り返すTimerを設定する
- JSpinnerのエディタをJLabelに変更してHTMLを表示する
JSpinner
のEditor
をJFormattedTextField
からJLabel
に変更して同様の文字色変更を行うサンプル