gpt4 book ai didi

java - Java 代码中的键盘/鼠标事件计时问题

转载 作者:行者123 更新时间:2023-11-30 02:19:35 26 4
gpt4 key购买 nike

我目前正在开发我的第一个 GUI 程序,有一个问题我不知道如何解决 - 我在下面提供了一个最小的(不可编译的)示例。

问题是,在某些情况下,如果在应该更改 activeElement 的鼠标单击后不久按下删除键,则在 activeElement 之前执行按键操作已更改为新值。如何确保 actionPerformed 中的代码等待 activeElementmouseClicked 更改?

<小时/>
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 中。

关于java - Java 代码中的键盘/鼠标事件计时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47253930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com