如何在一组循环生成的按钮中识别一个按钮?

how to identify a button in a group of loop generated buttons?

我有一组用这段代码制作的循环生成的按钮

this.panelCuerpo.setLayout(new GridLayout(4,5));
    for(int i = 1; i<=20; i++){
        final JToggleButton b = new JToggleButton(new ImageIcon("/images/available.png"));            
        panelCuerpo.add(b);

        b.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/available1.png")));
        b.addActionListener(new ActionListener() {
           @Override
            public void actionPerformed(ActionEvent evt){                    
                if(b.isSelected()){
                    b.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/busy1.png")));
                    cantidadBoletas++;                        
                }else{
                    b.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/available1.png")));
                    cantidadBoletas--;
                }
                System.out.println(cantidadBoletas);
            } 
        });
    } 

这里的问题是我以后不能使用 setText() 进行比较,因为没有 属性 来隐藏该文本。以后怎么比较呢?

PS。每个按钮都有一个连续的编号,很容易分配该编号。真正的问题在于把它放在哪里。

您可以维护 JToggleButtonList<JToggleButton> 并稍后由 index 获取元素。除此之外,而不是在循环中添加 ActionListener 你可以实现 ActionListener 它可以用于所有按钮,你只需要在循环中写 b.addActionListener(this);.

注意 :最好从 i = 0 而不是 1

开始

你可以:

  • 使用 Action API,它可以触发关联按钮的 selected 状态。这允许您将按钮与它应该使用的底层 "action" 分离。查看 How to Use ActionsHow to Use Actions 了解更多详情
  • 使用actionCommand属性的JButton。这允许您将某种 "identifier" 与独立于文本
  • 的按钮相关联
  • 使用数组或List维护对按钮的引用