Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでJComboBoxの項目にボーダー(境界線)を設定する方法

JComboBoxJComponentクラスのサブクラスであり、テキストフィールドドロップダウンリストを組み合わせたSwingコンポーネントです。ユーザーはドロップダウンリストから任意の値を選択できます。また、ユーザーがコンボボックスを操作した際には、ActionListenerChangeListenerItemListenerといったイベントリスナーを発生させることができます。

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に登録することで有効になります。

実行結果

JavaでJComboBoxの項目にボーダー(境界線)を設定する方法

このようにカスタムレンダラーを活用すれば、ボーダーの種類(LineBorder、EtchedBorderなど)や背景色・フォントなども自由に変更でき、アプリケーションのデザインに合わせた柔軟なUI構築が可能です。

  1. Javaで編集可能なJComboBoxを実装する方法【setEditable(true)の使い方を解説】

    JComboBoxとは JComboBoxはSwingが提供するGUIコンポーネントの一つで、JComponentクラスを継承しています。テキストフィールドとドロップダウンリストを組み合わせた部品であり、ユーザーはリストから値を選択することができます。 コントロールのテキストフィールド部分が編集可能に設定されている場合、ユーザーはフィールドに直接値を入力したり、ドロップダウンリストから取得した値を編集したりできます。 デフォルトでは、JComboBoxのテキストフィールド部分のデータは編集できないようになっています。ユーザーに編集を許可したい場合は、setEditable(true)メソッ

  2. JavaのBorderFactoryを使ってさまざまなボーダー(境界線)を実装する方法

    BorderFactoryは、Javaでさまざまな種類のボーダー(境界線)を生成するためのファクトリクラスです。このクラスを利用することで、Swingコンポーネントの外枠を簡単かつ柔軟にカスタマイズできます。ボーダーの種類BevelBorder:浮き上がった(RAISED)または沈み込んだ(LOWERED)斜めのエッジを描画します。ボタンなどに立体感を持たせたい場合に有効です。EmptyBorder:何も描画しませんが、余白としてスペースを確保します。コンポーネント間の間隔調整に役立ちます。EtchedBorder:LOWERED(沈み込み)タイプはくぼんだ矩形のような外観になり、RAISED