gpt4 book ai didi

java - 同时按下鼠标按钮无法正常工作

转载 作者:行者123 更新时间:2023-11-29 03:21:39 27 4
gpt4 key购买 nike

我必须检查我是否按下了鼠标上的左键、右键或两个按钮,这是一个示例代码:

package sandbox;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Sandbox extends JFrame {

public static void main(String[] args) {
Sandbox s = new Sandbox();
s.setVisible(true);

}

public Sandbox() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 200);
setResizable(false);
setTitle("Frame");
setLayout(null);
JButton but = new JButton("click me");
but.setBounds(0, 0, 120, 50);
but.addMouseListener(new MouseListener() {

@Override
public void mouseClicked(MouseEvent e) {
}

@Override
public void mousePressed(MouseEvent e) {
if(SwingUtilities.isLeftMouseButton(e) | SwingUtilities.isRightMouseButton(e))
System.out.println("both");
else if(SwingUtilities.isLeftMouseButton(e))
System.out.println("left");
else if(SwingUtilities.isRightMouseButton(e))
System.out.println("right");
}

@Override
public void mouseReleased(MouseEvent e) {
}

@Override
public void mouseEntered(MouseEvent e) {
}

@Override
public void mouseExited(MouseEvent e) {
}
});
add(but);
}

}

我必须使用 SwingUtilities 来实现它,但是如果我按下向左或向右的单个按钮会出现问题,它将打印“两者”,而不是“左”或“右”,如果我使用 MouseEvent 类它工作正常但是如果可能的话,我需要它和 SwingUtilities 类,谢谢。

编辑:使用 MouseEvent 类它工作正常:

if(e.getModifiersEx() == (MouseEvent.BUTTON1_DOWN_MASK | MouseEvent.BUTTON3_DOWN_MASK))
...

最佳答案

不要使用 OR (|) 检查,而是使用 AND (& 或更好的快捷方式版本 &&) 代替:

if(SwingUtilities.isLeftMouseButton(e) && SwingUtilities.isRightMouseButton(e))
...

更新:

要检查两个按钮是否都被按下,SwingUtilities 似乎不是正确的工具。 isXxxxMouseButton(...) 方法与您做的一样,它们检查按钮掩码,但使用不同的掩码,当两个按钮都被按下时,这些掩码似乎没有被设置。

例如,isRightMouseButton()实现如下:

public static boolean isRightMouseButton(MouseEvent anEvent) {
return ((anEvent.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK);
}

如您所见,实现并不那么复杂,因此您最好自己进行掩码检查。

关于java - 同时按下鼠标按钮无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23263901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com