2015-04-02 3 views
-1

Я пытаюсь выяснить, как получить каждую кнопку, чтобы дать мне сообщение о том, сколько дней осталось на Рождество. кнопки сделаны в петле, поэтому сложная часть здесь для меня - открыть кнопки после их создания.Получение всех кнопок для работы из цикла

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

хранить кнопки в массиве, ссылаясь на этот массив позже. –

+1

Вы не создаете кнопку 25 раз. Вы переименовываете одну и ту же кнопку 25 раз. Вы должны создать кнопки, сохранить их в массиве и дать им текст во время создания. – Aggressor

+0

У вас есть некоторые фундаментальные недоразумения в том, как работают Java и Swing. Если это для класса, вы должны показать это своему учителю. Если вы пытаетесь самостоятельно учиться, вам следует сосредоточиться на работе с помощью дополнительных обучающих программ. – ControlAltDel

ответ

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, если вам нужно.

+0

последний вопрос, как я могу получить номер списка с помощью кнопки. поэтому я могу сказать, сколько дней осталось до xmas? – elektronet

+0

Это плохая практика проектирования. Вы должны посмотреть на программирование контроллера модели. Представление не должно знать логику и не вычислять ее. Вы должны хранить такие значения в соответствующем словаре или создавать класс-оболочку, который отслеживает данные – Aggressor

+0

@elektronet, если у вас есть кнопка (например, от получения события действия), вы можете найти ее номер с циклом, подобным этому 'int n = 0; for (; n

Смежные вопросы