Слушатели Java Swing/JFrame

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

введите здесь описание изображения

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class TemperatureConversionJFrame extends JFrame{
private final JTextField temperatureF;
private final JLabel result;
public int fahrenheit = 0;

public TemperatureConversionJFrame(){
    super("Celsius Conversion");
    setLayout(new FlowLayout());
    temperatureF = new JTextField("Enter temperature in fahrenheit to be converted");
    add(temperatureF);
    result = new JLabel("Result in Celsius");
    add(result);


    TextFieldHandler handler = new TextFieldHandler();

    temperatureF.addActionListener(handler);

}

private class TextFieldHandler implements ActionListener{

 @Override
    public void actionPerformed(java.awt.event.ActionEvent evt){
        int F;
    int results;
            F = Integer.parseInt(temperatureF.getText());
            results = 5/9 * (F - 32);
result.setText(String.valueOf(results));
    }
}

import javax.swing.JFrame;

public class TemperatureConversionJFrameTest
{
public static void main(String[] args)
{ 
  TemperatureConversionJFrame temperatureConversionJFrame = new  TemperatureConversionJFrame(); 
            temperatureConversionJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 temperatureConversionJFrame.setSize(275, 100); 
 temperatureConversionJFrame.setVisible(true); 
} 

person Michael Fogarty    schedule 03.04.2017    source источник


Ответы (1)


Я думаю, что у меня что-то не так с слушателями

Ну, первое, что нужно сделать, это добавить System.out.println(...) в код слушателя, чтобы посмотреть, вызывается ли слушатель.

Предполагая, что он вызывается, я бы предположил, что проблема в следующем:

results = 5/9 * (F - 32);

Вы выполняете целочисленное деление, поэтому 5/9 всегда равно 0.

Одним из исправлений является использование чего-то вроде:

results = (F - 32) * 5 / 9;

Кроме того, ActionListener в текстовом поле вызывается только при нажатии клавиши Enter.

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

Прочтите раздел руководства по Swing, посвященный Как написать DocumentListener для получения дополнительной информации и примеров.

person camickr    schedule 03.04.2017
comment
Ах. Я полностью пропустил это. Спасибо, это была просто логика, которая отображала 0. - person Michael Fogarty; 03.04.2017
comment
@MichaelFogarty, вот почему следует использовать базовую отладку, такую ​​​​как отображение значения вычислений. Это поможет вам сузить круг проблем, а не гадать. - person camickr; 03.04.2017
comment
Я приму ответ, как только это позволит мне. Спасибо! - person Michael Fogarty; 03.04.2017