JavaのMouseEventsがキーとマウスボタンの間で修飾子を共有するのはなぜですか?
以下の簡単なコードを考えてみましょう。
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(800,600);
frame.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println(e);
}
});
frame.setVisible(true);
}
ウィンドウを3回クリックすると(左クリック1回、中クリック1回、右クリック1回)、次の出力が表示されます。
java.awt.event.MouseEvent[MOUSE_CLICKED,(165,149),absolute(165,149),button=1,modifiers=Button1,clickCount=1] on frame0
java.awt.event.MouseEvent[MOUSE_CLICKED,(292,228),absolute(292,228),button=2,modifiers=Alt+Button2,clickCount=1] on frame0
java.awt.event.MouseEvent[MOUSE_CLICKED,(293,228),absolute(293,228),button=3,modifiers=Meta+Button3,clickCount=1] on frame0
見てみると、すべてのミドルクリックはAltキーが押されていると報告され、すべての右クリックはMetaキーが押されていると報告されていることがわかります。これは十分に文書化されており、MouseEventのJavadocには、この重複について言及している行もあります。しかし、私の質問は、なぜそれがこのように報告されるのかということです。中クリックでe.isAltDown()からtrueを返す理由は何ですか?
これにより、一部のプラットフォームではAlt+Button1とButton2を区別することが困難になります。
同様に、Javaでクロスプラットフォームのマウスの動作を設計するための「ベストプラクティス」ガイドはありますか?