7

ユーザーがマウスの左ボタンと右ボタンを同時に押す必要があるメソッドを実装したいと考えています。

Swing と Java 1.7 を使用しています。私はこれを試しましたが、私が期待するように両方のボタンのケースを検出しません:

public void mousePressed(MouseEvent e) {    
     if (SwingUtilities.isLeftMouseButton(e) && SwingUtilities.isRightMouseButton(e)){
              ///code here
     }
}

メソッドを分離し、bool 値を使用してマウス ボタンが押されているかどうかを判断し、両方が同時に押されているかどうかを調べる条件を設定しようとしましたが、それもうまくいきませんでした..

4

2 に答える 2

6

これはあなたが望むことをするSSCCEです...つまり、あなたの質問を正しく理解した場合。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class StackOverflow15957076 extends MouseAdapter
{
    private JLabel status;

    private boolean isLeftPressed;
    private boolean isRightPressed;

    public StackOverflow15957076 ()
    {
        JFrame frame = new JFrame ();
        frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);

        JPanel panel = new JPanel (new FlowLayout (FlowLayout.CENTER));

        status = new JLabel ("waiting for both mouse buttons...");

        status.addMouseListener (this);

        panel.add (status);

        frame.add (panel);

        frame.pack ();
        frame.setVisible (true);

        isLeftPressed = false;
        isRightPressed = false;
    }

    @Override
    public void mousePressed (MouseEvent e)
    {
        if (SwingUtilities.isLeftMouseButton (e))
        {
            isLeftPressed = true;
        }
        else if (SwingUtilities.isRightMouseButton (e))
        {
            isRightPressed = true;
        }

        if (isLeftPressed && isRightPressed)
        {
            status.setText ("both buttons are pressed");
        }
    }

    @Override
    public void mouseReleased (MouseEvent e)
    {
        if (SwingUtilities.isLeftMouseButton (e))
        {
            isLeftPressed = false;
        }
        else if (SwingUtilities.isRightMouseButton (e))
        {
            isRightPressed = false;
        }

        status.setText ("waiting for both mouse buttons...");
    }

    public static void main (String[] args)
    {
        SwingUtilities.invokeLater (new Runnable ()
        {
            @Override
            public void run ()
            {
                new StackOverflow15957076 ();
            }
        });
    }
}
于 2013-04-11T19:32:32.697 に答える
1

マウスイベントは順番に発生するため、直接行うことはできないようです。たとえば、この SO question/answersを参照してください。

そのため、「同時に」が実際に何を意味するか (つまり、どれだけ近い時間であるべきか)を判断する必要があります。次に、2 つの別々のイベントをキャプチャして、それらのgetWhen()値を比較できます。

于 2013-04-11T19:38:33.453 に答える