JavaのJListでダブルクリックとEnterキーイベントを検出・処理する方法
JListはJComponentクラスを継承したSwingコンポーネントの一つで、ユーザーが単一選択または複数選択を行えるリストを表示できます。JListはListSelectionListenerインターフェースを生成でき、このインターフェースには抽象メソッドvalueChanged()が1つだけ定義されています。
さらに、JListでは以下のようなイベント処理も可能です。
- MouseListenerインターフェースを実装することで、リスト上のダブルクリックイベントを捕捉できる
- KeyListenerインターフェースを実装することで、Enterキーの押下イベントを捕捉できる
これらのリスナーは、それぞれアダプタークラス(MouseAdapterやKeyAdapter)を利用すると、必要なメソッドだけをオーバーライドすればよいため、コードがすっきりします。ダブルクリックの判定にはMouseEvent#getClickCount()の戻り値が2かどうかを確認し、Enterキーの判定にはKeyEvent#getKeyCode()がVK_ENTERと一致するかどうかを確認します。
サンプルコード
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
public class JListTest extends JFrame {
public JListTest() {
setTitle("JList Test");
setLayout(new FlowLayout());
Vector v = new Vector();
for (int i = 1; i < 15; i++) {
v.addElement("Item #" + i);
}
add(new JLabel("Double-clicked on: "));
final JTextField dblTextField = new JTextField(15);
add(dblTextField);
add(new JLabel("Enter key on: "));
final JTextField entTextField = new JTextField(15);
add(entTextField);
final JList list = new JList(v);
// ダブルクリックイベントを捕捉する
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
if (me.getClickCount() == 2) {
dblTextField.setText(""+list.getSelectedValue());
}
}
});
// Enterキーイベントを捕捉する
list.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent ke) {
if(ke.getKeyCode() == KeyEvent.VK_ENTER) {
entTextField.setText(""+list.getSelectedValue());
}
}
});
add(new JScrollPane(list));
setSize(375, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JListTest();
}
}
コードのポイント解説
ダブルクリックの検出
MouseAdapterを継承した無名クラスでmouseClicked()メソッドをオーバーライドし、getClickCount() == 2の条件でダブルクリックを判定しています。ダブルクリックされると、選択中の項目(getSelectedValue())がテキストフィールドに表示されます。
Enterキーの検出
KeyAdapterを継承した無名クラスでkeyReleased()メソッドをオーバーライドし、キーコードがVK_ENTERの場合に選択項目をテキストフィールドへ反映しています。
その他の実装ポイント
- リストには
JScrollPaneを組み合わせることで、項目数が多くてもスクロールして表示できるようにしています。 setLocationRelativeTo(null)により、ウィンドウが画面中央に表示されます。- 実際のアプリケーションでは、ジェネリクス(例:
JList<String>)を使うことで型安全なコードになります。
実行結果
プログラムを実行すると、15個の項目を持つリストが表示されたウィンドウが起動します。リストの項目をダブルクリックすると「Double-clicked on:」のテキストフィールドにその項目名が表示され、項目を選択した状態でEnterキーを押すと「Enter key on:」のテキストフィールドに項目名が表示されます。

-
JavaのJPopupMenuで右クリックメニュー(コンテキストメニュー)を実装する方法
Java SwingのJPopupMenuを使うと、マウスの右ボタンがクリックされたタイミングで、画面上の任意の場所にポップアップメニュー(コンテキストメニュー)を表示できます。 JPopupMenuの基本 ポップアップメニューは、インボーカー(invoker)と呼ばれる基盤となるコンポーネントに関連付けられた自由配置型のメニューです。 多くの場合、ポップアップメニューは特定のコンポーネントに紐付けられ、状況に応じた選択肢(コンテキスト依存の操作)を表示するために使用されます。 ポップアップメニューを作成するにはJPopupMenuクラスを使用し、通常のメニューと同じようにJMenuItem
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー