如何检查JButton是否被按下? 如果isEnable()不起作用?

如何检查JButton是否被按下? 我知道有一个方法,它的名字是“isEnabled”

所以我尝试编写一个代码进行测试。

  1. 这段代码有2个Jbuttons,分别是“Add”按钮和“Checkout”按钮。
  2. 在按下“添加”按钮后,当我按下“结帐”按钮时,代码将显示“添加按钮被按下”消息但是如果在按下“结账”按钮之前未按下“添加”按钮,则代码将显示“未按下添加按钮”消息。

这里的代码:

final JButton btnAdd = new JButton("Add"); btnAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { } }); panel.add(btnAdd); JButton btnConfirm = new JButton("Check Out"); btnConfirm.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (btnAdd.isEnabled()) { System.out.println("Add Button is pressed"); } if (!btnAdd.isEnabled()) { System.out.println("Add Button is not pressed"); } } }); 

当我运行此代码时,代码只提供“按下添加按钮”,虽然我没有按“添加”按钮。 它为什么会这样发生?

JButton有一个回答这些问题的模型 :

  • isArmed()
  • isPressed()
  • isRollOVer()

因此,您可以向模型询问您正在寻找的答案:

  if(jButton1.getModel().isPressed()) System.out.println("the button is pressed"); 

似乎你需要使用JToggleButton

 JToggleButton tb = new JToggleButton("push me"); tb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JToggleButton btn = (JToggleButton) e.getSource(); btn.setText(btn.isSelected() ? "pushed" : "push me"); } }); 

JButton#isEnabled更改组件的用户交互性,即用户是否能够与之交互(按下它)。

按下JButton ,它会触发actionPerformed事件。

由于启用了添加按钮,因此在按下确认按钮时会按下“添加”按钮。 如上所述,它与按下的按钮启动无关。

根据你的代码,如果你试图在确认按钮的ActionListener检查添加按钮的“按下”开始,它将始终为假,因为在调用添加按钮的ActionListener时按钮将仅处于按下状态。

基于所有这些信息,我建议您可以考虑使用JCheckBox ,然后可以使用JCheckBox#isSelected来确定它是否已被检查。

仔细查看如何使用按钮以获取更多详细信息

只需要做System.out.println(e.getActionCommand()); inside actionPerformed(ActionEvent e)函数。 这将告诉您刚执行了哪个命令。

要么

 if(e.getActionCommand().equals("Add")){ System.out.println("Add button pressed"); } 

您尝试使用的方法检查按钮是否处于活动状态:

btnAdd.isEnabled()

启用后,与此对象关联的任何组件都处于活动状态,并且能够触发此对象的actionPerformed方法。

此方法不检查按钮是否被按下。

如果我正确理解您的问题,您需要在用户点击“结帐”后停用“添加”按钮。

尝试在开始时禁用您的按钮: btnAdd.setEnabled(false)或在用户按下“Check out”之后