【发布时间】:2012-01-23 13:19:44
【问题描述】:
我目前正在用 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 中只设置了两个按钮。这是否意味着右键将由MouseEvent.BUTTON2 而不是MouseEvent.BUTTON3 表示?如果是,我该如何更改我的代码以适应这一点?有什么办法可以检测到这样的事情吗?
我在 MouseListener 界面和 MouseEvent 上阅读了我能找到的任何内容,但我找不到关于此的任何内容。
【问题讨论】:
-
@PetarMinchev 如果我是唯一的用户,这不会是一个问题......但我会在网上发布我的程序,所以很多人可能会使用它(或至少尝试一下)。跨度>
-
有3个无滚轮的按钮鼠标。
-
还有只有两个按钮的滚轮鼠标。
标签: java swing mouse mouseevent mouselistener