概要

JSpinnerの代わりにJComboBoxを使用することで、アイテムの文字色などを変更しています。

サンプルコード

JButton nb = createArrowButton(SwingConstants.NORTH);
nb.addActionListener(e -> {
  e.setSource(comboBox);
  comboBox.getActionMap().get("selectPrevious2").actionPerformed(e);
});

JButton sb = createArrowButton(SwingConstants.SOUTH);
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);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、ドロップダウンリストの表示を無効にしたJComboBox2つのArrowButtonを組み合わせて、JSpinner風のコンポーネントを作成しています。JComboBoxのデフォルトセルレンダラーはJLabelを継承していてHtmlタグが使用可能なので、各アイテムの文字色を<font>タグで部分的に変更しています。

参考リンク

コメント