[英]Keyboard / mouse event timing issues in Java code
我目前正在开发我的第一个GUI程序,有一个我不知道如何解决的问题-我在下面提供了一个最小的(不可编译)示例。
问题是,在某些情况下,如果在单击鼠标后不久应按activeElement
键,这将更改activeElement
,则在将activeElement
更改为新值之前执行键操作。 如何确保actionPerformed
中的代码等待activeElement
被mouseClicked
更改?
public class Problem extends JPanel implements MouseListener{
Element activeElement = null;
public Problem(){
super();
this.addMouseListener(this);
InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0),"test");
am.put("test",new AbstractAction(){
@Override
public void actionPerformed(ActionEvent ae){
if(activeElement!=null){
doSomethingWith(activeElement);
repaint();
}
}
});
}
@Override
public void mouseClicked(MouseEvent me){
activeElement = getElementByCoordinates(me.getX(),me.getY());
}
private Element getElementByCoordinates(int x, int y){
[...]
}
private void doSomethingWith(Element e){
[...]
}
}
按下并释放鼠标(几乎在同一位置)后,将调用mouseClicked
。 如果在释放鼠标之前键入键,则将在调用mouseClicked之前触发InputMap。
要在按下键之前注册鼠标按下,无论是否释放鼠标键,请将代码放置在mousePressed
而不是mouseClicked中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.