2017-04-03 76 views
0

我新的Java和我试图做一个简单的 初学者程序,它在用户的温度和输出 输入其转换成 摄氏度。我认为我有些东西与听​​众挂钩错误 ,不过因为它给出了输出,但是 它总是为零。我真的不确定我的错误 与听众和行动事件。的Java Swing/JFrame的听众

enter image description here

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

回答

2

我觉得我有什么迷上了错误的听众

好做的第一件事就是添加的System.out.println(...)到监听器代码,看看监听器是否被调用。

假设它被调用,那么我会想这个问题是:

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

你正在做的整数除法所以5/9始终为0

一个解决方法是使用这样的:

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

另外,仅当按下Enter键时才会调用文本字段上的ActionListener。您可能要考虑使用DocumentListener。无论何时在文本字段中添加或删除文本,都会调用它。

阅读有关How to Write a DocumentListener的Swing教程中的部分以获取更多信息和示例。

+0

啊。我完全错过了。谢谢,这只是它显示0的逻辑。 –

+1

@MichaelFogarty,这就是为什么应该使用显示计算值的基本调试。它可以帮助您缩小问题的位置而不是猜测。 – camickr

+0

只要它允许我接受答案。谢谢! –