JButton按下(非释放)

4

我有一个非常小的JButton,名为"b",我想在点击它时而不是释放它时执行一些操作。 我使用以下代码:

b.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e){
            //do some stuff
        }
    });

但我意识到的是,只要点击一次并释放,它就能做我想要的事情。怎样才能按照我的方式做到这一点呢? 谢谢。

2个回答

4

点击指的是按下并松开一个按钮。当单击按钮且在鼠标释放时,只有该按钮仍处于武装状态(鼠标位于按钮范围内)时才会触发单击事件。要处理按下事件,请使用低级别的MouseListener

btn.addMouseListener(new MouseListener() {

    @Override
    public void mousePressed(MouseEvent e) {
        //do some stuff
    }

    /*Override other methods*/

});

或者更好的方法是使用MouseAdapter

btn.addMouseListener(new MouseAdapter() {

        @Override
        public void mousePressed(MouseEvent e) {
            //do some stuff
        }

        /*No need to override other methods, `MouseAdapter` already does it*/

    });

尽管此答案被标记为解决方案,但它并不是真正的问题解决方案。我已经按照这种方式实现了它,但我想在按钮被键盘输入而非鼠标切换时对其进行响应。我该怎么做? - Schlangi

2
上面的回答只对鼠标事件做出反应,但是当按钮获得输入焦点时,可以通过使用空格键来切换按钮的按下状态。 要进行完整的实现,请使用MouseListener和KeyListener。
b.addMouseListener(new MouseListener() {

    public void mouseClicked(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {
        doOnPressedAction();
    }
    public void mouseReleased(MouseEvent e) {
        doOnReleasedAction();
    }
});
b.addKeyListener(new KeyListener(){
    public void keyTyped(KeyEvent e) {}

    public void keyPressed(KeyEvent e) {
        if (sendButton.getModel().isPressed()) {
            doOnPressedAction();
        } else {
            // just in case it can happen that the button is released on
            // a key press action (maybe another controls key listener...)
            doOnReleasedAction();
        }
    }

    public void keyReleased(KeyEvent e) {
        doOnReleasedAction();
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接