我试图找出如何让每个按钮给我一个消息,告诉他圣诞节还有多少天。这些按钮是在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");
}
}}
答案 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
变量访问任何按钮。