Swing/SpinnerTextColor のバックアップの現在との差分(No.3)
- 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:
概要
JSpinner
の代わりにJComboBox
を使用することで、アイテムの文字色などを変更しています。
Screenshot
Advertisement
サンプルコード
JButton nb = createArrowButton(SwingConstants.NORTH);
#spandel
nb.addActionListener(new ActionListener() {
#spanend
@Override public void actionPerformed(ActionEvent e) {
e.setSource(comboBox);
comboBox.getActionMap().get("selectPrevious2").actionPerformed(e);
}
#spanadd
nb.addActionListener(e -> {
#spanend
e.setSource(comboBox);
comboBox.getActionMap().get("selectPrevious2").actionPerformed(e);
});
#spanadd
#spanend
JButton sb = createArrowButton(SwingConstants.SOUTH);
#spandel
sb.addActionListener(new ActionListener() {
#spanend
@Override public void actionPerformed(ActionEvent e) {
e.setSource(comboBox);
comboBox.getActionMap().get("selectNext2").actionPerformed(e);
}
#spanadd
sb.addActionListener(e -> {
#spanend
e.setSource(comboBox);
comboBox.getActionMap().get("selectNext2").actionPerformed(e);
});
#spanadd
#spanend
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
風のコンポーネントを作成しています。各アイテムの文字色は、Html
の<font>
タグを使って変更しています。
上記のサンプルでは、ドロップダウンリストの表示を無効にしたJComboBox
と2
つのArrowButton
を組み合わせて、JSpinner
風のコンポーネントを作成しています。JComboBox
のデフォルトセルレンダラーはJLabel
を継承していてHtml
タグが使用可能なので、各アイテムの文字色を<font>
タグで部分的に変更しています。
-
BasicComboBoxUI#createArrowButton()
をオーバーライドして、JComboBox
の元ArrowButton
を非表示 -
BasicComboBoxUI#createArrowButton()
メソッドをオーバーライドしてJComboBox
のArrowButton
を非表示に設定 -
BasicComboBoxUI#setPopupVisible
、BasicComboBoxUI#createPopup()
、BasicComboPopup#show()
などをオーバーライドしてドロップダウンリストを無効化 -
BasicComboBoxUI#setPopupVisible(...)
、BasicComboBoxUI#createPopup()
、BasicComboPopup#show()
メソッドなどをオーバーライドしてドロップダウンリストを無効化 JComboBox#getActionMap()#get("selectNext2")
などで取得したアクションを実行するArrowButton
を作成してレイアウト- JTableを別コンポーネントから操作
- JComponentのKeyBinding一覧を取得する
- リピート機能には未対応
- ボタンをクリックしたままの場合、値変更が繰り返し実行されるリピート機能には未対応
参考リンク
- JComboBoxのArrowButtonを隠す
- JTableを別コンポーネントから操作
- JComponentのKeyBinding一覧を取得する
- JButtonがマウスで押されている間、アクションを繰り返すTimerを設定する
- JSpinnerのエディタをJLabelに変更してHTMLを表示する
-
JSpinner
のEditor
をJFormattedTextField
からJLabel
に変更して同様の文字色変更を行うサンプル
-