我有一些类需要从旧的不赞成使用的电话迁移:MouseEvent getModifiers()
需要转换为新样式:MouseEvent getModifiersEx()
单击示例中的框架将调用鼠标侦听器。请注意,(不建议使用的)getModifiers()给出了rt-click和lt-click的预期结果:
right click: 4, left click: 16
这表明rt-click与lt-click有区别,并且位值符合预期。
但是,使用getModifiersEx()不会显示期望值。
getModifiersEx的预期位值为:
right click: 4096, left click: 1024
但是看到的实际值是:
right click: 0, left click: 0
这使得rt单击与lt单击无法区分。
请注意,按下修饰键(例如Shift,Cntrl,Alt)确实设置了预期的位(但是按钮下的掩码位仍然为零,因此rt-click和lt-click仍然无法区分)
调用MouseEvent getButton()确实返回正确的按钮,所以这是一种变通方法。但是为什么getModifiersEx()不起作用?
这是在MacOS BTW上
/**Example showing issue with MouseEvent.getModifiersEx()*/
public class TrialGetModEx extends JFrame {
public TrialGetModEx() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 200);
setLocation(100,100);
setVisible(true);
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.print("Mod="+e.getModifiers());
System.out.print(" ModEx="+e.getModifiersEx());
System.out.println();
}
});
System.out.println("Expected Bit values:");
System.out.println(" BUTTON_1_MASK: "+MouseEvent.BUTTON1_MASK);
System.out.println(" BUTTON_3_MASK: "+MouseEvent.BUTTON3_MASK);
System.out.println(" BUTTON_1_DOWN_MASK: "+MouseEvent.BUTTON1_DOWN_MASK);
System.out.println(" BUTTON_3_DOWN_MASK: "+MouseEvent.BUTTON3_DOWN_MASK);
}
public static void main(String[] args) {
new TrialGetModEx();
}
}
我有一些类需要从旧的不赞成使用的电话迁移:MouseEvent getModifiers(),需要将其转换为新样式:MouseEvent getModifiersEx()单击...上的框架...]
经过一番调查后还可以,请在这里回答我自己的问题。
尽管文档建议使用getModifiersEx()替换不推荐使用的MouseEvent getModifiers(),但两者之间存在根本的区别。