簡體   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