Каким образом считать данные из JTextField в переменную класса типа int?
У меня есть JFrame, на котором размещено JTextField с пустым значением, и есть переменная класса типа int без инициализации (или автоматическая инициализация её нулем).
JTextField textField = new JTextField();
textField.setColumns(6);
frame.add(textField);
Что нужно сделать, чтобы когда пользователь внесет свое значение в JTextField на открывшемся окне, оно было записано в переменную типа int, и со значением этой переменной можно было бы работать далее в программе?
Если я пытаюсь ставить запись через слушатель, то ничего в переменную не записывается (скорее всего сам слушатель не срабатывает):
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String getValue = textField.getText();
x = Integer.parseInt(getValue); // x - переменная класса, в которую нужно записать значение введенное пользователем
}
});
Ответы (3 шт):
Добавь условие при котором слушатель будет срабатывать. К примеру добавь кнопку. Например :
If(e.getSource()==button){
String getValue = textField.getText();
x = Integer.parseInt(getValue);
}
с помощью кнопки можно взять значение из текстового поля.
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Берем значение вводимое пользователем
String s = inputNumber.getText();
//Присваиваем его переменной класса
i = Integer.parseInt(s);
//Используем - Например вставляем в другое текстовое поле
testNumber.setText(String.valueOf(i));
}
});
Добавление JTextField'а в AcionListener имеет одну особенность. Слушатель будет вызван только тогда, когда пользователь нажмёт enter.
Поэтому у вас есть несколько вариантов:
Оставить всё как есть и попросить пользователя нажать enter (например, разместить рядом с текстовым полем
JLabel). Это, пожалуй, самое ленивое и вместе с этим самое плохой способ решения ситуации. В таком случае вряд ли ваше приложение можно будет назвать "дружелюбным к пользователю". Это всё же костыль.Использовать кнопку как знак того, что пользователь закончил ввод. Это уже предлагалось в других ответах.
Использовать
DocumentListener, как предложено здесь.