Javaで編集可能なJComboBoxを実装する方法【setEditable(true)の使い方を解説】
JComboBoxとは
JComboBoxはSwingが提供するGUIコンポーネントの一つで、JComponentクラスを継承しています。テキストフィールドとドロップダウンリストを組み合わせた部品であり、ユーザーはリストから値を選択することができます。
- コントロールのテキストフィールド部分が編集可能に設定されている場合、ユーザーはフィールドに直接値を入力したり、ドロップダウンリストから取得した値を編集したりできます。
- デフォルトでは、JComboBoxのテキストフィールド部分のデータは編集できないようになっています。ユーザーに編集を許可したい場合は、setEditable(true)メソッドを呼び出します。
- JComboBoxは、ユーザーがコンボボックスを操作した際に、ActionListener、ChangeListener、ItemListenerなどのイベントリスナーを発生させることができます。
- getSelectedItem()メソッドを使うと、コンボボックスで選択された、あるいはユーザーが入力した項目を取得できます。
実装例(サンプルコード)
以下の例では、編集可能なJComboBoxを作成し、ユーザーが項目を選択または入力するたびに、その値を下部のJListに追加するとともに、コンボボックス自身の候補リストの先頭にも挿入しています。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JEditableComboBoxTest extends JFrame {
public JEditableComboBoxTest() {
setTitle("JEditableComboBox Test");
setLayout(new BorderLayout());
final JComboBox combobox = new JComboBox();
final JList list = new JList(new DefaultListModel());
add(BorderLayout.NORTH, combobox);
add(BorderLayout.CENTER, list);
combobox.setEditable(true);
combobox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent ie) {
if (ie.getStateChange() == ItemEvent.SELECTED) {
((DefaultListModel) list.getModel()).addElement(combobox.getSelectedItem());
combobox.insertItemAt(combobox.getSelectedItem(), 0);
}
}
});
setSize(new Dimension(375, 250));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) throws Exception {
new JEditableComboBoxTest();
}
}
コードのポイント
combobox.setEditable(true)を呼び出すことで、テキストフィールド部分が編集可能になります。addItemListener()でItemListenerを登録し、itemStateChanged()内でItemEvent.SELECTEDの状態変化を検知して処理を行っています。getSelectedItem()で選択・入力された値を取得し、insertItemAt()によって候補リストの先頭に追加することで、入力履歴のような挙動を実現しています。
実行結果

プログラムを実行すると、上部に編集可能なコンボボックス、中央にリストが表示され、コンボボックスで選択または入力した値が順次リストに追加されていきます。
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー
-
JavaのJWindowを使ってスプラッシュ画面を実装する方法
JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ