我有一个基于Java SDK的WorldWind应用程序构建。它有一个很好的事件处理程序,用于检测您何时单击对象,但我遇到了障碍。虽然我可以单击并选择单个对象,但我无法确定用户是否在单击时按下控制键(如果他们想要选择多个对象)。我可以为鼠标和键盘实现事件处理程序,但我不能为我的生活弄清楚如何将两者结合在一起。如何让我的鼠标监听器轮询系统以获取当前按下的键列表?
答案 0 :(得分:5)
您可以调用getModifiers()并按位比较以查看控件键(或者在事件期间是否按下了shift键。
public void mouseClicked( MouseEvent e ) {
if( ( e.getModifiers() & ActionEvent.CTRL_MASK ) > 0 ) {
// Control key depressed
}
}
答案 1 :(得分:1)
对于MouseEvent,您只需调用getModifiers()即可获得按下的修饰键(shift / control / alt等)键。
对于一般情况,使用变量将它们绑在一起?
你的keyhandler在注册一个按键时设置/清除变量,你的mouselistener会检查该变量。
如果您需要对这些进行更多的处理,只需创建一个密钥监听器和mouselistener访问的实例。
public class Pressedkeys {
private boolean shiftPressed = false;
private boolean controlPressed = false;
public void setShiftPressed(boolean pressed) {
this.shiftPressed = pressed;
}
public void setControlPressed (boolean pressed) {
this.shiftPressed = pressed;
}
public boolean isControlPresed() {
return controlPressed ;
}
...
}
Pressedkeys k = new PressedKeys();
MyMouseThing t = new MyMouseThing(k);
//your mousething mouse handler would check k.isControlPressed();
MyKeyboardThing t = new MyKeyboardThing (k);
//your KeyBoardThing - which has a key handler would set k.setControlPressed(..);