0

最終的に、アプローチを大幅に簡素化しました。2 番目のクラス ファイルをボタン用に変更し、3 番目のクラス ファイルを完全に削除しました。アクションボタンとキーボードのリターンキーを押すと、プログラムは計算を完了します。まったく難しいことではありませんでしたが、同じアプローチを使用する必要がありましたが、異なるタイプのリスナーを使用していました。ありがとうございました!

import javax.swing.JFrame;
public class Fahrenheit
{
    public static void main (String[] args)
    {

    JFrame frame = new JFrame ("Fahrenheit");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    FahrenheitPanel panel = new FahrenheitPanel();

    frame.getContentPane().add(panel);
    frame.pack();frame.setVisible(true);

    }
}

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class FahrenheitPanel extends JPanel
{
    private JLabel inputLabel, outputLabel, resultLabel;
    private JTextField fahrenheit;
    private JButton push;

    public FahrenheitPanel()
    {
        inputLabel = new JLabel ("Enter Fahrenheit temperature:");
        outputLabel = new JLabel ("Temperature in Celsius: ");
        resultLabel = new JLabel ("---");
        push = new JButton ("Convert");

        fahrenheit = new JTextField (5);
        fahrenheit.addActionListener (new TempListener());
        push.addActionListener (new ButtonListener());

        add (inputLabel);
        add(fahrenheit);
        add (outputLabel);
        add (resultLabel);
        add (push);

        setPreferredSize (new Dimension(300,75));
        setBackground (Color.yellow);
    }


    private class TempListener implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
        {
            int fahrenheitTemp, celsiusTemp;

            String text = fahrenheit.getText();

            fahrenheitTemp = Integer.parseInt (text);
            celsiusTemp = (fahrenheitTemp-32) * 5/9;

            resultLabel.setText (Integer.toString (celsiusTemp));
          }
      }


    private class ButtonListener implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
        {
            int fahrenheitTemp, celsiusTemp;

            String text = fahrenheit.getText();

            fahrenheitTemp = Integer.parseInt (text);
            celsiusTemp = (fahrenheitTemp-32) * 5/9;

            resultLabel.setText (Integer.toString (celsiusTemp));           
        }
    }
}
4

1 に答える 1

1

それを実装するには、次のことを行うことができます。

  1. クラス PushCounterPanel でタイプの変数を定義します。

    プライベート FahrenheitPanel パネル。

    クラス PushCounterPanel のコンストラクターを変更します。

    public PushCounterPanel ( FahrenheitPanel パネル) { this.panel = パネル; ... }

これを行うために、Panel FahrenheitPanel で入力テキスト値を取得できます。

2 ボタンをクリックすると、最初にテキスト値が空で数値でないかどうかを確認する必要があります。テキスト フィールドに数値を入力する場合は、クラス ButtonListener に次のコードを追加します。

         fahrenheitTemp = Integer.parseInt(panel.getFahrenheit().getText());
         celsiusTemp = (fahrenheitTemp-32) * 5/9;

このように、[ボタン] をクリックして値を設定できます。

3 したがって、次のコードを変更する必要があります。

a)華氏でのメインメソッド

frame.getContentPane().add(new PushCounterPanel(パネル));

b) 次の getter/setter メソッドをクラス FahrenheitPanel に追加します。

public JTextField getFahrenheit() {
    return fahrenheit;
}


public void setFahrenheit(JTextField fahrenheit) {
    this.fahrenheit = fahrenheit;

これがあなたの助けになることを願っています。

于 2013-10-31T05:11:02.777 に答える