1. ホーム
  2. java

[解決済み] Java Swingで右クリックのコンテキストメニューを作成するには?

2022-05-17 22:48:59

質問

現在、右クリックのコンテキストメニューを作成するために、新しい JMenu をインスタンス化し、その位置をマウスの位置に設定することで右クリックコンテキスト メニューを作成しています。もっと良い方法はないでしょうか?

どのように解決するのですか?

おそらく、手動で setVisible(true) を呼び出しているのでしょう。 これは、メニューに厄介なバグの動作を引き起こす可能性があります。

show(Component, int x, int x) メソッドは、必要なすべてのこと (マウスオーバー時にハイライト表示し、必要に応じてポップアップを閉じる) を処理し、ここで setVisible(true) を使用すると、追加の動作を追加することなく、メニューを表示するだけです。

右クリックによるポップアップメニューを作るには、単に JPopupMenu .

class PopUpDemo extends JPopupMenu {
    JMenuItem anItem;
    public PopUpDemo() {
        anItem = new JMenuItem("Click Me!");
        add(anItem);
    }
}

あとは、カスタムの MouseListener を追加するだけです。

class PopClickListener extends MouseAdapter {
    public void mousePressed(MouseEvent e) {
        if (e.isPopupTrigger())
            doPop(e);
    }

    public void mouseReleased(MouseEvent e) {
        if (e.isPopupTrigger())
            doPop(e);
    }

    private void doPop(MouseEvent e) {
        PopUpDemo menu = new PopUpDemo();
        menu.show(e.getComponent(), e.getX(), e.getY());
    }
}

// Then on your component(s)
component.addMouseListener(new PopClickListener());

もちろん、チュートリアルには があり、もう少し踏み込んだ の説明があります。

注意してください。 ポップアップメニューがユーザーがクリックした位置から離れた場所に表示されることに気づいたら、ポップアップメニューの表示位置を指定するために e.getXOnScreen()e.getYOnScreen() メソッドでxとyの座標を指定します。