概要

JComboBoxを編集可にしてテキスト入力部分とリスト部分にアイコンを表示します。

サンプルコード

private static Border makeIconBorder(JComponent c, ImageIcon i) {
  int iw = i.getIconWidth();
  Border b1 = BorderFactory.createMatteBorder(0, iw, 0, 0, i);
  Border b2 = BorderFactory.createEmptyBorder(0, 5, 0, 0);
  Border b3 = BorderFactory.createCompoundBorder(b1, b2);
  return BorderFactory.createCompoundBorder(c.getBorder(), b3);
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、リスト内の各項目にJLabel#setIcon(...)メソッドでアイコンを追加したListCellRendererJComboBoxに設定しています。

  • setEditable(false)
    • JComboBoxが編集不可の場合、リスト内の各項目だけでなくJComboBoxにもアイコンが表示される
  • setEditable(true)
    • 上:
      • JComboBoxの文字列入力欄にはアイコンが表示されない
    • 中:
      • combo.getEditor().getEditorComponent()で取得したJTextFieldMatteBorderを追加して文字列入力欄にアイコンを表示
    • 下:
      • combo.getEditor().getEditorComponent()で取得したJTextFieldにアイコンを追加したJLabelを追加
      • アイコン(JLabel)が文字列と重ならないようにJTextFieldにはその幅だけ余白をとるように設定

参考リンク

コメント