MouseEvent getModifiersEx()调用未按预期(或所记录)运行]]

问题描述 投票:0回答:1

我有一些类需要从旧的不赞成使用的电话迁移: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()单击...上的框架...]

java awt mouseevent
1个回答
0
投票

经过一番调查后还可以,请在这里回答我自己的问题。

尽管文档建议使用getModifiersEx()替换不推荐使用的MouseEvent getModifiers(),但两者之间存在根本的区别。

© www.soinside.com 2019 - 2024. All rights reserved.