Я делаю простой калькулятор, используя JFrame и JButtons.До того, как я сделал каждую кнопку с 0 по 9 со своими собственными слушателями действий, теперь я понял, что это супер неэффективно, и я должен использовать цикл для создания каждой кнопки и назначения ActionListeners.Таким образом, единственное, что должно происходить в каждом ActionListener - это добавлять любой номер кнопки в JTextField, называемый nums.Вот что у меня сейчас есть.
for(int i = 0; i <=9; i++) {
count = i;
btns.get(i).addActionListener(new ActionListener(){ //makes action listeners for each button
public void actionPerformed(ActionEvent e){
nums.setText(nums.getText()+ count);//IMPORTANT CODE
}
});
}
Итак, как вы можете видеть, я использовал переменную с ужасным именем count
.count
устанавливается на i
в каждой итерации перед использованием важного кода.Я должен сделать это, потому что AL является его собственным классом и не может получить доступ к i.Однако count является открытым и статическим, поэтому AL могут использовать count.
Моя проблема в том, что все кнопки печатают 9. Это логично, потому что происходит то, что AL в каждой кнопке используют переменную count, когда цикл завершится, count будет 9, что означает каждыйAL по существу будет содержать nums.setText(nums.getText()+ 9);
.Вместо этого мне нужно, чтобы кнопка 1 была nums.setText(nums.getText()+ 1);
2, чтобы быть 2, ETC.
Я попытался вызвать текст каждой кнопки, однако, поскольку вам нужно использовать индекс в методе get ArrayList, вам нужна переменная, если вы используете count, возникает та же проблема;после завершения цикла for счетчик равен 9, поэтому все кнопки печатают текст кнопки 9.
Любая и вся помощь приветствуется, заранее спасибо, -Max
PS Простов случае, если вы не понимаете, почему я получаю текст, а затем добавляю счетчик, это потому, что для того, чтобы набрать число 12. вам нужно набрать 1, а затем соединить 2 с тем, что в et 12. getText получает1, и добавление счетчика объединяет 2, чтобы получить 12.