Java Swing サンプル集

Top Page
* 右クリックメニューの表示
-
・説明
-

デフォルトではText系コンポーネント上でも右クリックメニューは表示されません。
右クリックを表示させるためには、以下の手順で実装します。
  1. 右クリック時に表示させるJMenuItemのインスタンスをメニュー数分生成する。
    このJMenuItemのパラメータが右クリック時に表示される文字列になる。
  2. 上記の各メニューが選択された際の処理をActionListenerを実装したクラスに定義し、 インスタンスをそれぞれ生成、JMenuItemに追加しておく。
    メニュー選択時は、このクラス内のactionPerformed()イベントがコールされる。
  3. JMenuItemが貼り付くJPopupMenuのインスタンスを生成し、 上から表示する順番でJMenuItemインスタンスをaddする。
  4. 右クリックを表示させたいコンポーネントにマウスリスナーを追加し、 マウス押下イベント発生時に上記JPopupMenuインスタンスを表示するように実装しておく。
app
サンプルソース : src_right_click.zip
サンプルアプリ : sample_right_click.jar
・コード例
-

    private void initializeRightClickMenu(Component component) {
        // 右クリック用のメニューを定義
        JMenuitem jmenuitem1, jmenuitem2;
        jmenuitem1 = new JMenuitem("red");          // 1つ目のメニュー
        jmenuitem2 = new JMenuitem("blue");         // 2つ目のメニュー
        
        // 各メニュー選択時の処理
        jmenuitem1.addActionListener(new SampleActionListener("Red"));
        jmenuitem2.addActionListener(new SampleActionListener("Blue"));
        
        // 右クリック時に表示するポップアップを定義
        JPopupmenu jpopup = new JPopupmenu();
        jpopup.add(jmenuitem1);             // red
        jpopup.add(jmenuitem2);             // blue
        
        // マウスイベント用リスナー追加
        component.addMouseListener(new SampleMouseListener(
                component, jpopup));
        // ポップアップをフレームに設定
        jframe.add(jpopup);
    }

    /**
     * マウスイベントリスナー
     */
    class SampleMouseListener extends MouseAdapter {
        
        /**
         * イベント発生元のコンポーネント
         */
        private Component component;

        /**
         * 表示するポップアップ
         */
        JPopupMenu jpopup;

        /**
         * コンストラクタ
         * 
         * @param component イベント発生元のコンポーネント
         * @param jpopup 表示するポップアップ
         */
        public SampleMouseListener(Component component, JPopupMenu jpopup) {
            super();
            this.component = component;
            this.jpopup = jpopup;
        }
        
        /**
         * コンポーネント上でマウスボタンを押すと呼び出されます。
         */
        public void mousePressed(MouseEvent e){
            
            /** 右押下時のみ **/
            if(SwingUtilities.isRightMouseButton(e)) {
                
                // クリックされた位置にポップアップを表示
                jpopup.show(component, e.getX(), e.getY());
            }
        }
    }
    
    /**
     * メニュー選択時の処理
     */
    class SampleEventListener implements ActionListener {

        /**
         * 色を表す文字列
         */
        private String color;
        
        /**
         * コンストラクタ
         * 
         * @param color 色を表す文字列
         */
        public SampleEventListener(String color) {
            super();
            this.color = color;
        }
        
        /**
         * イベント発生時の処理
         */
        public void actionPerformed(ActionEvent e) {
            
            if(color.equals("Red")) {
                jPanel.setBackground(Color.RED);
            }
            else if(color.equals("Blue")) {
                jPanel.setBackground(Color.BLUE);
            }
        }
    }


inserted by FC2 system