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

JavaのJListでダブルクリックとEnterキーイベントを検出・処理する方法

JListJComponentクラスを継承したSwingコンポーネントの一つで、ユーザーが単一選択または複数選択を行えるリストを表示できます。JListはListSelectionListenerインターフェースを生成でき、このインターフェースには抽象メソッドvalueChanged()が1つだけ定義されています。

さらに、JListでは以下のようなイベント処理も可能です。

  • MouseListenerインターフェースを実装することで、リスト上のダブルクリックイベントを捕捉できる
  • KeyListenerインターフェースを実装することで、Enterキーの押下イベントを捕捉できる

これらのリスナーは、それぞれアダプタークラス(MouseAdapterKeyAdapter)を利用すると、必要なメソッドだけをオーバーライドすればよいため、コードがすっきりします。ダブルクリックの判定には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のJListでダブルクリックとEnterキーイベントを検出・処理する方法

  1. JavaのJPopupMenuで右クリックメニュー(コンテキストメニュー)を実装する方法

    Java SwingのJPopupMenuを使うと、マウスの右ボタンがクリックされたタイミングで、画面上の任意の場所にポップアップメニュー(コンテキストメニュー)を表示できます。 JPopupMenuの基本 ポップアップメニューは、インボーカー(invoker)と呼ばれる基盤となるコンポーネントに関連付けられた自由配置型のメニューです。 多くの場合、ポップアップメニューは特定のコンポーネントに紐付けられ、状況に応じた選択肢(コンテキスト依存の操作)を表示するために使用されます。 ポップアップメニューを作成するにはJPopupMenuクラスを使用し、通常のメニューと同じようにJMenuItem

  2. JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説

    JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー