繁体   English   中英

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

[英]Keyboard / mouse event timing issues in Java code

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

问题是,在某些情况下,如果在单击鼠标后不久应按activeElement键,这将更改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中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM