让所有按钮从循环中工作

时间:2015-04-02 19:18:49

标签: java for-loop jbutton actionlistener

我试图找出如何让每个按钮给我一个消息,告诉他圣诞节还有多少天。这些按钮是在for循环中制作的,所以对我来说这个棘手的部分就是在制作后打开按钮。

int days = 24;
int i = 1;
JButton b1 = new JButton();
JLabel l1 = new JLabel("welcome to this year advent calendar");

public Oblig6(){
    this.add(l1);
    this.setTitle("advent calender");
    this.setLayout(new FlowLayout());
    this.setSize(230, 440);
    this.setVisible(true);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    for(i=1; i < 25;i++){
        b1.setText("Hatch "+i);
        this.add(b1);
        b1.setVisible(true);
        b1 = new JButton();
        b1.addActionListener(this); 
    }
}

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    if(arg0.getSource().equals(b1)){
        JOptionPane.showMessageDialog(null, "it's only "+i+" days left for christmes");
    }
}}

1 个答案:

答案 0 :(得分:3)

如果您需要稍后参考按钮,请保留一个数组,而不是仅使用一个变量(b1)来创建最后一个。此外,您错过了第一个按钮上的b1.addActionListener(this),因为它已经被下一个按钮取代了。您可以像这样定义一个按钮数组:

private JButton[] buttons = null;

然后在初始化期间:

buttons = new JButton[24];
for (int i=0; i<24; i++) {
    buttons[i] = new JButton();
    buttons[i].setActionListener(this);
    buttons[i].setText("Hatch "+(i+1));
    buttons[i].setVisible(true);
    this.add(buttons[i]);
}

稍后,如果需要,您可以通过buttons变量访问任何按钮。