0

私は自分のコードを示しています。送信ボタンのクリック時に出力を表示するのに問題があります。最初は、インナークラスでローカル変数を使用できませんでしたが、検索すると、誰かがそれを使用するfinalと言いました。私はそうしましたが、それでも出力が得られません。これはこのボタンの背後にある単純な式です。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JOptionPane;

public class FtoC {

    public static void main(String[] args) {
        Frame frm = new Frame();
        Label lb = new Label("Calculater");
        frm.setSize(500, 300);
        frm.setVisible(true);
        frm.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        Panel obj = new Panel();
        Panel obj2 = new Panel();
        Label F = new Label("F");
        final TextField Ft = new TextField(10);
        Label C = new Label("C");
        TextField Ftc = new TextField(10);
        obj.setLayout(new GridLayout(1, 1));
        obj.add(F);
        obj.add(Ft);
        obj.add(C);
        obj.add(Ftc);
        final String sFt = Ft.getText();
        Button submit = new Button("Calculate");
        submit.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                double Ftn = Double.parseDouble(sFt);
                double result = (Ftn - 32) * 5 / 9;
                //System.out.println(Ft);
                JOptionPane.showMessageDialog(null, result);
            }
        });

        obj.add(submit);
        obj2.add(obj);
        frm.add(obj2, BorderLayout.NORTH);
    }
}
4

3 に答える 3

2
final String sFt=Ft.getText();

ここでの問題は、ユーザーがテキストを入力する前にフィールドから値を割り当てることです。

String を final にする代わりに、アクション イベントが発生したときにフィールドからテキストを取得します。

これがテスト プログラムであることを願っていますが、カスタム パネル (JPanel から拡張されたクラス) を作成し、フォーム要素をプライベート メンバーにすることをお勧めします。そこから、デザインが大幅に簡素化され、問題が軽減されます

于 2012-09-23T12:50:30.503 に答える
1

Ft構築直後のウィジェットの値は必要ありませんよね? ボタンがクリックされたときに何が欲しいですか?だから、移動

String sFt=Ft.getText()

アクションリスナーに行を追加します。

于 2012-09-23T12:46:35.890 に答える
1

さらに、pack()フレームと呼び出しsetVisible() last :

public static void main(String[] args) {
    ...
    frm.add(obj2, BorderLayout.NORTH);
    frm.pack();
    // frm.setSize(500, 300); // optional
    frm.setVisible(true);
}
于 2012-09-23T12:59:09.583 に答える