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

时间:2015-06-03 02:12:23

标签: java arrays swing netbeans jbutton

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

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。每个按钮都有一个连续的号码,很容易分配该号码。真正的问题在于放在哪里。

2 个答案:

答案 0 :(得分:4)

你可以:

  • 使用Action API,可以触发相关按钮的selected状态。这允许您将按钮与它应该采取的基础“动作”分离。有关详细信息,请查看How to Use Actions How to Use Actions
  • 使用actionCommand的{​​{1}}属性。这允许您拥有与按钮相关联的某种“标识符”,该标识符独立于文本
  • 使用数组或JButton维护对按钮的引用

答案 1 :(得分:2)

您可以在List<JToggleButton>之后保留JToggleButton index和fetch元素。除此之外,您可以实现ActionListener而不是在循环中添加ActionListener,这可以用于所有按钮,您只需要在循环中编写b.addActionListener(this);

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