简体   繁体   中英

How to check if any button in JPanel is clicked by a user

I've been making a bus booking project and I've made a booking page.

The JPanel named PanelSeat and it contains buttons (about 36 buttons) inside.

I want to check if any button inside JPanel is clicked, then disable the button and finally if a user clicks util 3 buttons, it will be stopped or a user can't click it anymore.

This is the code I've written so far:

private void CountTicket() {
    try {
        int count = 3;
        Component[] components = PanelSeat.getComponents();
        for (int i = 0; i < components.length; i++) {
            if (components[i] instanceof JButton) {
                if (((JButton) components[i]).isSelected()) { // I wanna check if any button is clicked by a user
                    if (JOptionPane.showConfirmDialog(this, "Seat Confirmation") == JOptionPane.YES_OPTION) { // confirm message
                        ((JButton) components[i]).setEnabled(false); // disable the button
                        count--;
                        System.out.println("Your ramaining seat : " + count);
                    }
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

How do I check if button has been clicked?

Since you want to count how many times a button was pressed, and then disable it with counts involved I would suggest that you wrap the Jbutton class in order to make performing those tasks easier, this solution is generally better

class JbuttonWrapper extends JButton {
  int count=0;
  public void increment()
  {
     count++;
     if (count==numberOfclicksToDisable)
     {
        this.setEnabled(false);
     }
  }
}

  //then you can simply do the following.
  JbuttonWrapper [] buttons= new JbuttonWrapper [NumbersOfButtonsYouHave];
  for (int i=0; i<=NumbersOfButtonsYouHave;i++)
  {
      buttons[i].addActionListener(new ActionListener() { public void    actionPerformed(ActionEvent e) { buttons[i].increment(); } });
  }

and this solution is based on your code

static int count=3;
    Component[] components = PanelSeat.getComponents();
    for (int i = 0; i < components.length; i++) {
        if (components[i] instanceof JButton) {
           { 
               components[i].addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    count--;
                }
            });
           }         

ActionListener添加到JButton ,请在此处查看示例。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM