55

コンポーネントでマウスをダブルクリックしたときにアクションを実行する方法を知りたいです。

4

4 に答える 4

95
public void mouseClicked(MouseEvent event)
{
  if (event.getClickCount() == 2 && event.getButton() == MouseEvent.BUTTON1) {
    System.out.println("double clicked");
  }
}
于 2010-10-29T12:09:02.970 に答える
22

Swing を意味すると仮定すると、コンポーネントに MouseListener を割り当てます。

addMouseListener(new MouseAdapter(){
    @Override
    public void mouseClicked(MouseEvent e){
        if(e.getClickCount()==2){
            // your code here
        }
    }
});

参照:

于 2010-10-29T12:16:07.463 に答える
20

ユーザーが短い遅延で複数のダブルクリックを実行できるようにする場合は、これe.getClickCount()==2では不十分です。デスクトップ構成によって制限されます。あなたはの結果を見ることによってそれを得ることができます Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");

この問題を回避する良い方法は、getClickCount()チェックを使用するのではなくTimer、クリック間の間隔の最大値を選択できる場所を使用して、カウントを自分で処理することです (非常に簡単です)。

関連するコード:

boolean isAlreadyOneClick;

@Override
public void mouseClicked(MouseEvent mouseEvent) {
    if (isAlreadyOneClick) {
        System.out.println("double click");
        isAlreadyOneClick = false;
    } else {
        isAlreadyOneClick = true;
        Timer t = new Timer("doubleclickTimer", false);
        t.schedule(new TimerTask() {

            @Override
            public void run() {
                isAlreadyOneClick = false;
            }
        }, 500);
    }
}

Win Xp OS でテスト済みで、完璧です。

于 2013-09-24T19:48:37.517 に答える
0

私の問題は、ユーザーが 1 回クリックした場合は 1 つの方法で応答し、複数回クリックした場合は別の方法で応答する必要があることです (私の Swing VM は、複数回クリックすると最大 4 回のクリックをカウントできるようです)。上記の例を実行すると、トリプル クリックが 1 回としてカウントされるように見えました。だから、ここに私の書き直しがあります。基本的に、ほこりがなくなるまで待ってから、登録されたクリック数をチェックするスケジュールされたタスクがあります。400ミリ秒の待機が私には最適なようです。

JButton jButton = new JButton("Click Me!");
jButton.addMouseListener(new MouseAdapter() {
    private int eventCnt = 0;
    java.util.Timer timer = new java.util.Timer("doubleClickTimer", false);

    @Override
    public void mouseClicked(final MouseEvent e) {
        eventCnt = e.getClickCount();
        if ( e.getClickCount() == 1 ) {
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    if ( eventCnt == 1 ) {
                        System.err.println( "You did a single click.");
                    } else if ( eventCnt > 1 ) {
                        System.err.println("you clicked " + eventCnt + " times.");
                    }
                    eventCnt = 0;
                }
            }, 400);
        }
    }
});
于 2019-03-31T17:29:53.530 に答える