繁体   English   中英

Java Swing / JFrame侦听器

[英]Java Swing/JFrame Listeners

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

我认为听众有些不对劲

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

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

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

您正在执行整数除法,因此5/9始终为0。

一种解决方法是使用类似:

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

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

您可能要考虑使用DocumentListener 只要在文本字段中添加或删除文本,就会调用此方法。

阅读Swing教程中有关如何编写DocumentListener的部分, 获取更多信息和示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM