JavaでJComboBoxの項目にボーダー(境界線)を設定する方法
JComboBoxはJComponentクラスのサブクラスであり、テキストフィールドとドロップダウンリストを組み合わせたSwingコンポーネントです。ユーザーはドロップダウンリストから任意の値を選択できます。また、ユーザーがコンボボックスを操作した際には、ActionListener、ChangeListener、ItemListenerといったイベントリスナーを発生させることができます。
JComboBoxの各項目にボーダーを設定するには、DefaultListCellRendererクラスを継承したカスタムレンダラーを作成し、getListCellRendererComponent()メソッドをオーバーライドします。このメソッド内で返されるJLabelに対してsetBorder()メソッドを使ってボーダーを適用することで、リスト内のすべての項目の外観を自由にカスタマイズできます。
構文
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus)
パラメータの説明
- list:描画対象となるJListオブジェクト
- value:描画するセルの値
- index:セルのインデックス(選択されていない場合は-1)
- isSelected:セルが選択されている場合はtrue
- cellHasFocus:セルにフォーカスがある場合はtrue
実装例
import java.awt.*;
import javax.swing.*;
public class JComboBoxTest extends JFrame {
public JComboBoxTest() {
setTitle("JComboBox Test");
String[] cities = {"Hyderabad", "Mumbai", "Pune", "Bangalore", "Chennai", "Coimbatore"};
JComboBox jcb = new JComboBox(cities);
jcb.setRenderer(new CustomComboBoxRenderer());
add(jcb, BorderLayout.NORTH);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
class CustomComboBoxRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel lbl = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
lbl.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7));
lbl.setBackground(Color.lightGray);
return lbl;
}
}
public static void main(String[] args) {
new JComboBoxTest();
}
}
コードのポイント
- CustomComboBoxRendererクラスはDefaultListCellRendererを継承しており、まず親クラスのgetListCellRendererComponent()を呼び出してデフォルトのJLabelを取得しています。
- BorderFactory.createEmptyBorder(7, 7, 7, 7)により、上下左右に7ピクセルの余白(空のボーダー)を設定し、項目同士の間隔にゆとりを持たせています。
- setBackground(Color.lightGray)で背景色を薄いグレーに変更し、視認性を高めています。
- 作成したレンダラーはjcb.setRenderer()メソッドでJComboBoxに登録することで有効になります。
実行結果

このようにカスタムレンダラーを活用すれば、ボーダーの種類(LineBorder、EtchedBorderなど)や背景色・フォントなども自由に変更でき、アプリケーションのデザインに合わせた柔軟なUI構築が可能です。
-
Javaで編集可能なJComboBoxを実装する方法【setEditable(true)の使い方を解説】
JComboBoxとは JComboBoxはSwingが提供するGUIコンポーネントの一つで、JComponentクラスを継承しています。テキストフィールドとドロップダウンリストを組み合わせた部品であり、ユーザーはリストから値を選択することができます。 コントロールのテキストフィールド部分が編集可能に設定されている場合、ユーザーはフィールドに直接値を入力したり、ドロップダウンリストから取得した値を編集したりできます。 デフォルトでは、JComboBoxのテキストフィールド部分のデータは編集できないようになっています。ユーザーに編集を許可したい場合は、setEditable(true)メソッ
-
JavaのBorderFactoryを使ってさまざまなボーダー(境界線)を実装する方法
BorderFactoryは、Javaでさまざまな種類のボーダー(境界線)を生成するためのファクトリクラスです。このクラスを利用することで、Swingコンポーネントの外枠を簡単かつ柔軟にカスタマイズできます。ボーダーの種類BevelBorder:浮き上がった(RAISED)または沈み込んだ(LOWERED)斜めのエッジを描画します。ボタンなどに立体感を持たせたい場合に有効です。EmptyBorder:何も描画しませんが、余白としてスペースを確保します。コンポーネント間の間隔調整に役立ちます。EtchedBorder:LOWERED(沈み込み)タイプはくぼんだ矩形のような外観になり、RAISED