[英]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.