JAVA: синтаксический анализ метода int при его использовании в JTextField не работает

#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. пожалуйста, вы должны пометить ответ как принятый, чтобы другие, у кого такая же проблема, могли иметь к нему отношение