Как я могу разобрать значение из JTextField в целое число и выполнить над ним некоторые математические операции?

Итак, я пытался сделать конвертер Цельсия на Java с помощью Swing и застрял на получении входных данных от JTextField и анализе его в целое число, чтобы я мог выполнить уравнение на нем. Если я оставлю его как String, я не смогу выполнять какие-либо математические операции.

Я добавил частную строку с именем cValue, в которой я сохраняю значение текстового поля, а затем у меня есть некоторый код в ActionListener, который анализирует эту строку в Integer.

Когда я запускаю программу, она открывает окно без каких-либо проблем. Я могу ввести что угодно в текстовое поле, но как только я нажимаю кнопку, программа закрывается, и мне показывают ошибку, которую я не могу понять. Если я перемещу код из прослушивателя действий и запущу программу, она выдаст мне ошибку.

Теперь я новичок в Java и еще не знаком с ней. Я написал это с помощью eclipse и создал пользовательский интерфейс с помощью WindowBuilder. Я пробовал много вещей, и пока ничего не сработало. Я ценю любую форму обратной связи, которую я могу получить.

Это код:

private String cValue; 
private String result = "0";
private JPanel contentPane;
private JTextField celsiusField;
private JButton convertButton;

/**
 * Create the frame.
 */
public CelsiusConverter() {

    setDefaultCloseOperation(CelsiusConverter.EXIT_ON_CLOSE);
    setBounds(100, 100, 194, 134);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblCelsius = new JLabel("Celsius");
    lblCelsius.setBounds(10, 11, 61, 14);
    contentPane.add(lblCelsius);

    celsiusField = new JTextField();
    celsiusField.setBounds(81, 8, 86, 20);
    contentPane.add(celsiusField);
    celsiusField.setColumns(10);

    JLabel lblFahrenheit = new JLabel("Fahrenheit:");
    lblFahrenheit.setBounds(10, 73, 70, 14);
    contentPane.add(lblFahrenheit);

    JLabel lblResult = new JLabel();
    lblResult.setText(String.valueOf(result));
    lblResult.setBounds(81, 73, 87, 14);
    contentPane.add(lblResult);     
    cValue = celsiusField.getText();

    convertButton = new JButton("Convert");
    convertButton.setBounds(10, 39, 157, 23);
    contentPane.add(convertButton);
    convertButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            int parsed = Integer.parseInt(cValue);
        }           
    });
}

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                CelsiusConverter frame = new CelsiusConverter();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

И это ошибка:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""

at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at learningWindowBuilder.CelsiusConverter$1.actionPerformed(CelsiusConverter.java:53)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
SpinnerNumberModel numberModel = new SpinnerNumberModel(val, min, max, step); JSpinner spinner = new JSpinner(numberModel); добавляет ChangeListener к счетчику. Позже, когда значение изменяется и вызывается слушатель, это так же просто, как numberModel.getNumber().intValue();Предостережение, те фрагменты кода, которые не тестировались или не проверялись документами API. БНИ.
Andrew Thompson 23.01.2019 19:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
853
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
cValue = celsiusField.getText();

Вы еще не можете вызвать этот оператор, потому что графический интерфейс даже не виден, а у пользователя не было возможности ввести данные в текстовое поле.

Вам нужно получить текст из текстового поля в вашем ActionListener

String cValue = celsiusField.getText();
int parsed = Integer.parseInt(cValue);

Другие вопросы по теме