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

Java 如何检查JButton是否已按下?如果isEnable()不起作用?,java,swing,awt,jbutton,Java,Swing,Awt,Jbutton,如何检查JButton是否已按下?我知道有一个方法的名称是“isEnabled” 所以我试着写一段代码来测试 这段代码有两个按钮,分别是“添加”按钮和“签出”按钮 当我按下“添加”按钮后按下“签出”按钮时,代码将显示“添加按钮已按下”消息,但如果在按下“签出”按钮之前未按下“添加”按钮,代码将显示“添加按钮未按下”消息 代码如下: final JButton btnAdd = new JButton("Add"); btnAdd.addActionListener(new ActionListe

如何检查JButton是否已按下?我知道有一个方法的名称是“isEnabled”

所以我试着写一段代码来测试

  • 这段代码有两个按钮,分别是“添加”按钮和“签出”按钮
  • 当我按下“添加”按钮后按下“签出”按钮时,代码将显示“添加按钮已按下”消息,但如果在按下“签出”按钮之前未按下“添加”按钮,代码将显示“添加按钮未按下”消息
  • 代码如下:

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

    当我运行这段代码时,代码只给出了“Add button is pressed”,尽管我没有按“Add”按钮。为什么会这样

    JButton
    有一个解决以下问题的方法:

    • isArmed()
    • isPressed()
    • isRollOVer()
    因此,您可以向模型询问您正在寻求的答案:

         if(jButton1.getModel().isPressed())
            System.out.println("the button is pressed");
    
    似乎您需要使用:

    JButton#isenable
    更改组件的用户交互,即用户是否能够与其交互(按下它)

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

    由于“添加”按钮已启用,当您按下“确认”按钮时,您将收到“添加”按钮被按下的消息。如上所述,这与按下按钮的开始无关

    根据您的代码,如果您试图在确认按钮的
    ActionListener
    中检查add按钮的“按下”开始,它将始终为false,因为只有在调用add按钮的
    ActionListener
    时,按钮才会处于按下状态

    基于所有这些信息,我建议您考虑使用<代码> jCuthBox ,然后可以使用<代码> jCuthboxβ>选择< <代码>以确定它是否已被检查。


    请仔细查看更多详细信息

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


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

    btnAdd.isEnabled()

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

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

    如果我正确理解您的问题,您希望在用户单击“签出”后禁用“添加”按钮

    尝试在开始时禁用按钮:
    btnAdd.setEnabled(false)
    或在用户按下“签出”后使用此命令

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

    答案很简短。但这对我很管用。初始化btnAdd.setEnabled(false)后,使用按钮的变量名,而不是“JButton”。

    ;检查是否按下的确切目的是什么?侦听器只注册到一个按钮,因此只需执行所需的操作,而无需检查anything@peeskillet如何在不添加任何内容的情况下结账@伊莎兰,你什么意思?@peeskillet确切地说,如果它被移除了怎么办?:)很好的建议,但是除非OP检查它的
    ActionListener
    中的add按钮的状态,否则它将始终被解除/取消按下。这就是
    JButton
    的工作原理……是的!事实上,如果他使用
    ActionListner
    ,他甚至不需要检查isPressed类型检查。他只需声明一个布尔值,并在目标按钮的操作侦听器侦听操作事件时使其为真。我只是想让用户知道这些针对
    isEnabled()
    :)的函数。这些天来,很多用户的问题没有多大意义,但其他人的声誉,甚至不关心:因此,让我贪婪。抱歉,但谁不想发财呢?@Sage仍然不起作用。代码给了我“false”值,尽管我在这里已经按下了该按钮:btnAdd.addActionListener(新ActionListener(){public void actionPerformed(ActionEvent arg0){System.out.println(“+btnAdd.getModel().isPressed());});按照程序员的建议去做。他已经解释了它不起作用的原因。我的目的是让您知道几个状态函数是如何存在的,以便与之一起工作的。:)+1:不过我刚才已经说过了。。对不起,我没注意到:)我同意他应该改变设计理念。事实上,当他用按下
    添加按钮的
    检查按钮
    进行检查时:正如peeskiller所指出的,我不认为有任何理由依赖输入控制组件out@Sage不用担心,说同样话的人越多,我们就越有可能把我们的信息传达出去;)取决于动作命令!不,我不认为这是个好建议。请重新思考并阅读其他答案:)@Sage你们都很好。但我测试了这个,它是有效的,这是一个简单的方法。
    if(e.getActionCommand().equals("Add")){
    
       System.out.println("Add button pressed");
    }
    
    if(JButton.getModel().isArmed()){
        //your code here.
        //your code will be only executed if JButton is clicked.
    }