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

时间:2013-12-27 10:35:53

标签: java swing awt jbutton

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

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

  1. 此代码有2个Jbuttons,它们是" Add"按钮和"结帐"按钮。
  2. 代码将显示"按下添加按钮"按下" Checkout"按下"添加"按钮但是如果"添加"在" Checkout"之前没有按下按钮。按下按钮,代码将显示"未按下添加按钮"消息。
  3. 这里是代码:

    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");
            }
        }
    });
    

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

6 个答案:

答案 0 :(得分:13)

JButtonmodel来回答这些问题:

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

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

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

答案 1 :(得分:3)

似乎您需要使用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");
    }
});

答案 2 :(得分:2)

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

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

当您按下确认按钮时,您正在接收Add button is pressed因为启用了添加按钮。如上所述,它与按下按钮的开始无关。

根据您的代码,如果您尝试检查"已按下"在确认按钮的ActionListener内开始添加按钮,它总是错误的,因为按钮只会处于按下状态,而添加按钮的ActionListener正在调用。

根据所有这些信息,我建议您考虑使用JCheckBox,然后使用JCheckBox#isSelected确定是否已对其进行检查。

仔细查看How to Use Buttons了解更多详情

答案 3 :(得分:1)

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

if(e.getActionCommand().equals("Add")){

   System.out.println("Add button pressed");
}

答案 4 :(得分:0)

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

btnAdd.isEnabled()

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

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

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

尝试在开始时停用按钮:btnAdd.setEnabled(false)或在用户按下“结帐”后

答案 5 :(得分:0)

使用此命令

if(JButton.getModel().isArmed()){
    //your code here.
    //your code will be only executed if JButton is clicked.
}

答案很短。但这对我有用。使用按钮的变量名称代替“ JButton”。