私は現在、Javaでプログラムを開発しています。このプログラムでは、ユーザーがボタンを左クリックと右クリックの両方でクリックした場合にのみ、特定のイベントをトリガーする必要があります。
少し型破りなので、まずこれをテストすることにしました。ここにあります:
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import Java.awt.event.MouseListener;
import Java.awt.event.MouseEvent;
public class GUI
{
private JFrame mainframe;
private JButton thebutton;
private boolean left_is_pressed;
private boolean right_is_pressed;
private JLabel notifier;
public GUI ()
{
thebutton = new JButton ("Double Press Me");
addListen ();
thebutton.setBounds (20, 20, 150, 40);
notifier = new JLabel (" ");
notifier.setBounds (20, 100, 170, 20);
mainframe = new JFrame ("Double Mouse Tester");
mainframe.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
mainframe.setResizable (false);
mainframe.setSize (400, 250);
mainframe.setLayout (null);
mainframe.add (thebutton);
mainframe.add (notifier);
mainframe.setVisible (true);
left_is_pressed = right_is_pressed = false;
}
private void addListen ()
{
thebutton.addMouseListener (new MouseListener ()
{
@Override public void mouseClicked (MouseEvent e) { }
@Override public void mouseEntered (MouseEvent e) { }
@Override public void mouseExited (MouseEvent e) { }
@Override public void mousePressed (MouseEvent e)
{
//If left button pressed
if (e.getButton () == MouseEvent.BUTTON1)
{
//Set that it is pressed
left_is_pressed = true;
if (right_is_pressed)
{
//Write that both are pressed
notifier.setText ("Both pressed");
}
}
//If right button pressed
else if (e.getButton () == MouseEvent.BUTTON3)
{
//Set that it is pressed
right_is_pressed = true;
if (left_is_pressed)
{
//Write that both are pressed
notifier.setText ("Both pressed");
}
}
}
@Override public void mouseReleased (MouseEvent e)
{
//If left button is released
if (e.getButton () == MouseEvent.BUTTON1)
{
//Set that it is not pressed
left_is_pressed = false;
//Remove notification
notifier.setText (" ");
}
//If right button is released
else if (e.getButton () == MouseEvent.BUTTON3)
{
//Set that it is not pressed
right_is_pressed = false;
//Remove notification
notifier.setText (" ");
}
}
});
}
}
テストして動作しましたが、問題があります。
ご覧のとおり、マウスの左ボタンはMouseEvent.BUTTON1
で表され、マウスの右ボタンはMouseEvent.BUTTON3
で表されます。
ユーザーがスクロールホイールのないマウスを持っている場合(明らかにそのようなマウスはまだ存在します)、MouseEventには2つのボタンのみが設定されます。それは、右ボタンがMouseEvent.BUTTON2
ではなくMouseEvent.BUTTON3
で表されることを意味しますか?はいの場合、これに対応するためにコードを変更するにはどうすればよいですか?このようなものを検出する方法はありますか?
MouseListenerインターフェースとMouseEventで見つけたものは何でも読みましたが、これについては何も見つかりませんでした。
どのマウスボタンが押されているかを判断するには、 SwingUtilities の次の3つの方法が役立ちます。
SwingUtilties からユーティリティメソッドを使用できます:
SwingUtilities.isLeftMouseButton(MouseEvent anEvent)
SwingUtilities.isRightMouseButton(MouseEvent anEvent)
SwingUtilities.isMiddleMouseButton(MouseEvent anEvent)
MouseEvent.isPopupTrigger()
もあります。マウスの右ボタンが押された場合、このメソッドはtrueを返すはずです。