關於java的一題設計

題目是要我設計溫度轉換:華氏轉成攝氏,輸入要經由(JTextField),輸出要用(JLable)型態轉換出來,請問一下各位高手,我要怎樣才能把我輸入到(JTextField)的字串經過轉換成Double然後再做計算,再把它轉成字串,用(JLable)輸出。

以下是我寫的程式碼,請問我到底錯在哪裡???(麻煩請說明一下謝謝)

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class transfer extends JFrame

{

protected JTextField Fahrenheit;

protected JLabel Celsius;

public transfer()

{

super("To change Fahrenheit to Celsius");

setLayout( new FlowLayout());

Fahrenheit = new JTextField(10);

add(Fahrenheit);

FahrenheitHandler handler = new FahrenheitHandler();

Fahrenheit.addActionListener(handler);

}

private class FahrenheitHandler extends transfer implements ActionListener

{

double B;

double C;

public void actionPerformed(ActionEvent event)

{

String A = "";

if(event.getSource() == Fahrenheit)

{

A = String.format("%s",event.getActionCommand());

}

B = Double.parseDouble(A);

C = 9 * (B - 32) / 5;

String D = String.format("%f",C);

Celsius = new JLabel(D);

Celsius.setToolTipText("Celsius = 5 * (Fahrenheit-32) / 9");

add(Celsius);

}

}

}

已更新項目:

我這題題目是在(JAVA HOW TO PROGRAM 第7版 作者:DEITEL),第11張11.7題

2 個已更新項目:

是11.8題

1 個解答

評分
  • 1 0 年前
    最佳解答

    ①你的FahrenheitHandler不需要在繼承 transfer 類別

    ②將視窗元件加入至JFrame需要使用JFrame的getContentPane()方法來將其加入。

    ③需要使用JFrame的setVisible(true)方法來將視窗顯示在畫面上。

    ④要取得Fahrenheit的輸入文字,是使用getText()方法,而不是ActionEvent的getActionCommand()方法。

    ⑤你視窗元件配置的方式滿特別的。你可以先產生並顯示JLabel,之後計算完後,再使用其setText(String text)方法來設定計算結果,不需要再等計算完後再建立JLabel。

    參考程式碼:

    import java.awt.*;

    import javax.swing.*;

    import java.awt.event.*;

    public class transfer extends JFrame{

    protected JTextField Fahrenheit;

    protected JLabel Celsius;

    public transfer(){

    super("To change Fahrenheit to Celsius");

    setLayout(new FlowLayout());

    Fahrenheit = new JTextField(10);

    getContentPane().add(Fahrenheit);

    FahrenheitHandler handler = new FahrenheitHandler();

    Fahrenheit.addActionListener(handler);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setSize(150,100);

    setVisible(true);

    }

    private class FahrenheitHandler implements ActionListener{

    double B,C;

    public void actionPerformed(ActionEvent event){

    String A = ((JTextField)event.getSource()).getText();

    B = Double.parseDouble(A);

    C = 9 * (B - 32) / 5;

    String D = String.format("%f",C);

    if (Celsius!=null)

    getContentPane().remove(Celsius);

    Celsius = new JLabel(D);

    Celsius.setToolTipText("Celsius = 5 * (Fahrenheit-32) / 9");

    getContentPane().add(Celsius);

    getContentPane().validate();

    }

    }

    public static void main(String argv[]) {

    new transfer();

    }

    }

    參考資料: Ellen Page
還有問題?馬上發問,尋求解答。