我有一组用这段代码制作的循环生成按钮
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。每个按钮都有一个连续的号码,很容易分配该号码。真正的问题在于放在哪里。
答案 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