【问题标题】:Java Swing/JFrame ListenersJava Swing/JFrame 监听器
【发布时间】:2017-04-03 03:08:01
【问题描述】:

我是 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); 
} 

【问题讨论】:

    标签: java swing jframe listener actionevent


    【解决方案1】:

    我觉得我的听众有问题

    首先要做的就是将 System.out.println(...) 添加到侦听器代码中,以便查看是否调用了侦听器。

    假设它被调用,那么我猜问题是:

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

    你正在做整数除法,所以 5/9 总是 0。

    一个解决方法是使用类似的东西:

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

    此外,文本字段上的 ActionListener 仅在按下 Enter 键时调用。

    您可能需要考虑使用DocumentListener。每当在文本字段中添加或删除文本时都会调用它。

    阅读 How to Write a DocumentListener 上的 Swing 教程部分,了解更多信息和示例。

    【讨论】:

    • 啊。我完全错过了。谢谢,这只是让它显示 0 的逻辑。
    • @MichaelFogarty,这就是为什么应该使用像显示计算值这样的基本调试。它可以帮助您缩小问题所在而不是猜测。
    • 我会尽快接受答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多