概要

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 all

解説

上記のサンプルでは、JLabel#setIcon(...)でアイコンを追加し、リスト内の各項目にアイコンが表示されるように設定したListCellRendererJComboBoxに設定しています。

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

参考リンク

コメント