2

ユーザーが変換する温度スケールと変換元の温度スケールを選択returnedConversionした後に結果が返されるように、メソッドを接続したいと思います。ActionListener控えめに言ってもコードが少しバラバラになっていることに気付いたので、コメントアウトされた領域はすべて無視してください(注意すべき領域を指摘できない限り)。

returnedConversionそのコードをメソッドからに接続しActionListenerて、コードが正しく動作するようにするにはどうすればよいですか?また、ボックスからの入力を正しくJTextFielddoubleに変換してから、適切にaに変換しStringて、2番目のJTextFieldボックスに戻しましたか?

package temperatureConverter;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class TempConverter extends JFrame {
    private JComboBox firstComboBox;
    private JComboBox secondComboBox;
    private JTextField initialTemp;
    private JTextField convertedTemp;
    private JButton convertButton;
    // private enum TempType { FAHRENHEIT, CELSIUS, KELVIN};
    private static final String[] tempType = { "Fahrenheit", "Celsius",
            "Kelvin" };
    public static final String theInitialTempType = null;
    public static final String theTempTypeToConvertTo = null;
    public static final String theChosenTemp = null;
    public static final String theNewTemp = null;

    public TempConverter() {
        super("Temperature Converter");
        setLayout(new FlowLayout());

        firstComboBox = new JComboBox(tempType);
        firstComboBox.setMaximumRowCount(3);
        firstComboBox.addActionListener(null);
        add(firstComboBox);
        secondComboBox = new JComboBox(tempType);
        secondComboBox.setMaximumRowCount(3);
        secondComboBox.addActionListener(null);
        add(secondComboBox);
        initialTemp = new JTextField("", 10);
        initialTemp.addActionListener(null);
        add(initialTemp);
        convertedTemp = new JTextField("", 10);
        convertedTemp.addActionListener(null);
        add(convertedTemp);
        convertButton = new JButton("Convert");
        convertButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                String applyIt = returnedConversion(initialTemp.getText());
                System.out.println(applyIt);
//              convertedTemp.returnedConversion();
                // ???????????????????????????????????????????
            }
        });
        add(convertButton);
        // String theInitialTempType = (String) firstComboBox.getSelectedItem();
        // String theTempTypeToConvertTo = (String)
        // secondComboBox.getSelectedItem();
        // String theChosenTemp = initialTemp.getSelectedText();
        // String theNewTemp = convertedTemp.getSelectedText();
    }

    // public class textHandler implements ActionListener
    // {
    // public void itemStateChanged (ActionEvent event)
    // {
    // double convertedNumberForTheChosenTemp =
    // Double.parseDouble(theChosenTemp);
    // double convertedNumberForTheNewTemp = Double.parseDouble(theNewTemp);
    // String string1 = "";
    // String string2 = "";
    //
    // if ( theInitialTempType == tempType[0] && theTempTypeToConvertTo ==
    // tempType[1] )
    //
    // convertedNumberForTheNewTemp = (convertedNumberForTheChosenTemp - 32) * 5
    // / 9;
    // String result = String.valueOf(convertedNumberForTheNewTemp);
    // convertedTemp.getSelectedText();
    // }

    // @Override
    // public void actionPerformed (ActionEvent e) {
    //
    // }
    // }
    public String returnedConversion(String toConvert) {
        double convertedNumberForTheChosenTemp = Double.parseDouble(theChosenTemp);
        double convertedNumberForTheNewTemp = Double.parseDouble(theNewTemp);

        if (theInitialTempType == tempType[0] && theTempTypeToConvertTo == tempType[1]) {
            convertedNumberForTheNewTemp = (convertedNumberForTheChosenTemp - 32) * 5 / 9;
            String result = String.valueOf(convertedNumberForTheNewTemp);
            return result;
        } else if (theInitialTempType == tempType[0] && theTempTypeToConvertTo == tempType[2]) {
            convertedNumberForTheChosenTemp = (convertedNumberForTheChosenTemp + 459.67) / 1.8;
            String result = String.valueOf(convertedNumberForTheNewTemp);
            return result;

        } else if (theInitialTempType == tempType[1] && theTempTypeToConvertTo == tempType[0]) {
            convertedNumberForTheChosenTemp = (convertedNumberForTheChosenTemp * 1.8) + 32;
            String result = String.valueOf(convertedNumberForTheNewTemp);
            return result;
        } else if (theInitialTempType == tempType[1] && theTempTypeToConvertTo == tempType[2]) {
            convertedNumberForTheChosenTemp = convertedNumberForTheChosenTemp + 273.15;
            String result = String.valueOf(convertedNumberForTheNewTemp);
            return result;
        } else if (theInitialTempType == tempType[2] && theTempTypeToConvertTo == tempType[0]) {
            convertedNumberForTheChosenTemp = (convertedNumberForTheChosenTemp * 1.8) - 459.67;
            String result = String.valueOf(convertedNumberForTheNewTemp);
            return result;
        } else if (theInitialTempType == tempType[2] && theTempTypeToConvertTo == tempType[1]) {
            convertedNumberForTheChosenTemp -= 273.15;
            String result = String.valueOf(convertedNumberForTheNewTemp);
            return result;
        }

        return null;
    }

    public static void main(String[] args) {
        TempConverter tempTest = new TempConverter();
        tempTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        tempTest.setSize(300, 200);
        tempTest.setVisible(true);
    }
}
4

2 に答える 2

6

最初のステップとして、 「一般的に処理されるイベントのリスナーの実装」についてお読みください。これにより、で基本的なイベント処理を操作する方法についての良いアイデアが得られます。Swing

私が正しく理解しているなら、これがあなたが達成したいことです:

  • ユーザーは、提供されたものを使用して変換オプションを選択しますJComboBox
  • ユーザーが最初にJTextField呼び出された値を入力しますinitialTemp
  • ユーザーがConvert JButtonを押してから、そのイベントをキャプチャし、最初のテキストを隠してJTextField、変換された結果を2番目に表示しJTextFieldます。

したがって、最初のステップとして、変換を行うメソッドを実装する必要があります。つまり、ユーザーがConvertボタンを押すと、このメソッドが呼び出され、最初のメソッドから値を取得しJTextField、変換を実行して、これをテキスト値として更新します。 2番目JTextField。あなたはと呼ばれるメソッドを持っていますpublic String returnedConversion(String toConvert)、私はこれにいくつかの変更を提案します:

public void returnedConversion(String initialValue){
    //Step 1. Validate the input
    //Step 2. Convert the value. You write your own logic taking into account the initialValue
    //        and the JComboBox conversion options
    //Step 3. Set the text of the second JTextField to the converted value, using the method convertedTemp.setText(...)
}

ここで、が呼び出されたときにこのメソッドを呼び出す必要がありますConvert JButton。ですから、あなたが正しくやったように、あなたはActionListenerそれに関連付けられることを望みます。さて、あそこで何をしますか?さてこのようなもの:

convertButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        returnedConversion(initialTemp.getText());
    }
});

これにより、コードを支援するための適切なポインターが得られることを願っています。

また、最後の注意として、Swingアプリケーションの起動方法について理解するために、 「スレッドとSwing」および「 Swingを使用したスレッド」について読むことをお勧めします。

于 2012-09-01T07:17:06.180 に答える
2

49行目:

String applyIt = returnedConversion(toConvert);

ここでは、文字列をメソッドに渡す必要がありますが、変数を文字列としてreturnedConversion宣言および初期化していない。toConvert

50行目:

convertedTemp.returnedConversion();

convertedTempタイプはJTextFieldです。したがって、ここでは未定義のメソッドにアクセスできませんreturnedConversion()convertedTempJTextFieldにテキストを表示しようとしている場合は、を使用する必要がありますconvertedTemp.setText(applyIt)

于 2012-09-01T06:30:48.160 に答える