如何解决isMetaDown方法在Java SE 14中无法处理鼠标事件
扩展JFrame的类的主体
import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MouseDetailsFrame extends JFrame {
private final JLabel statusJLabel;
public MouseDetailsFrame() {
super("Mouse Adapter example");
statusJLabel = new JLabel("You clicked 0 times");
add(statusJLabel,BorderLayout.SOUTH);
addMouseListener(new MouseAdapterHandler());
}
private class MouseAdapterHandler extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent event) {
int posX = event.getX();
int posY = event.getY();
String details = String.format("You clicked %d time(s) ",event.getClickCount());
if (event.isMetaDown() == true)
details += "with Right Mouse Button";
else if (event.isAltDown() == true)
details += "with center Mouse Button";
else
details += "with Left Mouse Button";
statusJLabel.setText(details + String.format(" at ( %d,%d )",posX,posY));
}
}
}
包含主要方法的驱动程序类:
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.JFrame;
public class MouseEventTest {
public static void main(String[] args) {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
}
}
} catch (Exception e) {
e.printStackTrace();
}
MouseDetailsFrame mouseDetailsFrame = new MouseDetailsFrame();
mouseDetailsFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mouseDetailsFrame.setSize(400,200);
mouseDetailsFrame.setVisible(true);
}
}
每当我按下任何鼠标按钮时,程序都只会注册为向左按钮。 但是,按住alt键的同时按鼠标左键可以模拟鼠标中键。 我不太了解,我有3个按钮的鼠标,按下每个按钮是否会导致JVM生成不同的鼠标事件?
解决方法
我有3个按钮的鼠标,不是按下每个按钮都会导致JVM生成不同的鼠标事件吗?*
也许您正在寻找:
-
SwingUtilities.isLeftMouseButton(event)
-
SwingUtilities.isMiddleMouseButton(event)
-
SwingUtilities.isRightButton(event)
在旧的 Java 版本中,如果按下 Alt 键或按下中间按钮,event.isAltDown()
返回 true,this is a bug。
在较新的版本中,例如 Java 14,仅当按下 Alt 键时才返回 true。
同样的错误影响 event.isMetaDown()
,但使用鼠标右键。
换句话说,event.isAltDown()
和 event.isMetaDown()
不应该用于测试鼠标按钮
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。