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);
}
I think I have something hooked up wrong with the listeners
首先要做的是在监听器代码中添加 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 教程部分以获取更多信息和示例。
我是 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);
}
I think I have something hooked up wrong with the listeners
首先要做的是在监听器代码中添加 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 教程部分以获取更多信息和示例。