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