如何在 Java 中使用 ActionListener 按下或释放按钮时为按钮分配方法?



我是用 Java 编写 GUI 的新手,我试图在按下按钮时在终端上打印一条消息,在释放按钮时打印另一条消息。

这是我常规按下按钮的功能。

leftButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("Pressed");
}
});

我在IntelliJ IDEA的帮助下做到了这一点。我想让按钮在按下时发送消息,在释放时发送不同的东西。

您可以添加一个简单的MouseAdapter,如下所示:

MouseAdapter ma = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.out.println("Pressed");
}
public void mouseReleased(MouseEvent e) {
System.out.println("Released");
}
};
leftButton.addMouseListener(ma);
frame.add(button);

这将检测鼠标何时按下按钮或释放按钮。

如果需要,您还可以在MouseAdapter中添加mouseClicked()方法、mouseExited()mouseEntered()mouseMoved()和(许多(更多方法。看看这个JavaDoc

使用自定义类并使用它

leftButton.getModel().addChangeListener(new BtnCusttomListener());


private class BtnCusttomListener implements ChangeListener {
private boolean pressed = false;  // holds the last pressed state of the button
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel Buttonmodel = (ButtonModel) e.getSource();
// if the current state differs from the previous state
if (model.isPressed() != pressed) {
String text = "Button pressed: " + model.isPressed() + "n"; 
textArea.append(text);
pressed = model.isPressed();
}
}
}

您可以改用MouseListener

leftButton.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
// The mouse button was pressed and released
}
@Override
public void mousePressed(MouseEvent e) {
// The mouse button was pressed
}
@Override
public void mouseReleased(MouseEvent e) {
// The mouse button was released
}
@Override
public void mouseEntered(MouseEvent e) {
// The cursor entered the bounds of the button (i.e. hovering)
}
@Override
public void mouseExited(MouseEvent e) {
// The cursor exited the bounds of the button
}
});

最新更新