#user-interface #jtextfield #parseint
#пользовательский интерфейс #jtextfield #parseint
Вопрос:
Я создал простой код для вычисления BMI, но он показывает ошибку в строке с методом parseInt, может кто-нибудь помочь (немного новичок в java: P)
public BmiF(){
super("BMI Calculator");
setLayout(new FlowLayout());
t1 = new JTextField("enter wieght in kg",10);
final int num1 =Integer.parseInt(t1.getText());
add(t1);
t2 = new JTextField("enter hieght in m",10);
final int num2 =Integer.parseInt(t2.getText());
add(t2);
t3 = new JTextField("",10);
t3.setEditable(false);
add(t3, BorderLayout.SOUTH);
b = new JButton("Claculate BMI");
add(b);
b.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event) {
int k = num1/(num2*num2);
t3.setText(String.format("Your BMI is %d",k));
}
}
);
}
}
Комментарии:
1. в какой строке ошибка и какое сообщение об ошибке
2. @user3779888 Помещает final int num2 =Integer.parseInt(t2.getText()); внутри выполняемого цикла actionPerformed . Он пытается проанализировать его сразу перед вводом любого ввода. Также вы должны поместить final int num1 =Integer.parseInt(t1.getText()); там также
3. есть ли прогресс в работе с приложением?
Ответ №1:
Вы пытаетесь проанализировать String
«введите вес в кг» как int
. Смотрите Документ java здесь, чтобы узнать, что означает ваша инициализация.
Вам нужно проанализировать строку в ActionListener
и добавить правило catch
исключения.
Я получил приведенный ниже код для работы. Еще одна проблема, с которой вы сталкиваетесь, заключается в том, что вам нужно объявить int
or double
в try
блоке кода без final
квалификатора, чтобы вы могли изменить переменную после инициализации
frame.setLayout(new FlowLayout());
textArea.setEditable(true);
textArea.setPreferredSize(new Dimension(50, 15));
button = new JButton("ok");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String string = textArea.getText().trim();
int weight = Integer.parseInt(string);
//do stuff with weight variable
System.out.println(weight);
} catch(Exception e1) {
System.out.println("number exception");
}
}
});
frame.add(textField);
frame.add(textArea);
frame.add(button);
frame.setSize(300, 100);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Комментарии:
1. привет, большое спасибо, на самом деле я не думал, что smone ответит так быстро: p
2. эй, извините, но он все еще не работает, за исключением того, что на этот раз я использовал метод parseDouble и использовал try catch, а также поместил требуемый код внутри выполняемого действия
3. Я вставил некоторый код, который отлично работал для меня. Вы должны изменить его в соответствии с вашими потребностями, видя, что я не унаследовал
JFrame
в своем проекте и только проверил, что у вас пошло не так.4. Вы поняли это?
5. пожалуйста, вы должны пометить ответ как принятый, чтобы другие, у кого такая же проблема, могли иметь к нему отношение