2

私がやろうとしているのは、2つのJComboBoxと2つのJTextFieldボックスを作成することです。最初のJComboBoxで温度タイプ(華氏、摂氏、ケルビン)を使用し、その最初の温度タイプを2番目のJComboBoxで選択された温度タイプに変換するコードを記述できる必要があります。これは、最初のJTextFieldボックスに入力された数値(選択した一時タイプの初期値)を使用して実行し、2番目のJTextFieldボックスで新しい温度タイプに変換する必要があります。これが私がどこまで進んだかです...

テストを実行すると40行目にNullPointerException表示されますが、ifステートメントで使用されているdoubleを正しくフォーマットして、新しい値が2番目のJTextFieldボックスに文字列として再び表示されるようにしたかどうかわかりません。他のすべてのシナリオを処理するために他のすべてのifステートメントを作成する前に、この時点までに行ったことが正しいかどうかについてのいくつかのポインターを探しています。

package temperatureConverter;


import java.awt.FlowLayout;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.JFrame;
import javax.swing.JComboBox;
import javax.swing.JTextField;

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

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

        firstComboBox = new JComboBox(tempType);
        firstComboBox.setMaximumRowCount(3);
        firstComboBox.addItemListener(null);
        add(firstComboBox);
        secondComboBox = new JComboBox(tempType);
        secondComboBox.setMaximumRowCount(3);
        secondComboBox.addItemListener(null);
        add(secondComboBox);
        initialTemp = new JTextField ("", 10);
        initialTemp.addActionListener(null);
        add(initialTemp);
        convertedTemp = new JTextField ("", 10);
        convertedTemp.addActionListener(null);
        add(convertedTemp);
    }
    String theInitialTempType = (String) firstComboBox.getSelectedItem();
    String theTempTypeToConvertTo = (String) secondComboBox.getSelectedItem();
    String theChosenTemp = initialTemp.getSelectedText();
    String theNewTemp = convertedTemp.getSelectedText();

    private class textHandler implements ItemListener
    {
        public void itemStateChanged (ItemEvent 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);
            }
        }
    }
}
4

2 に答える 2

2
String theInitialTempType = (String) firstComboBox.getSelectedItem();

このコード行は、フィールドが作成されるコンストラクターの外にあります。属性はクラスの他のメソッドで使用されるため、宣言String theAttributeはコンストラクターの外部にある必要があります。

一方、インスタンスの作成/初期化は、他のフィールドが作成された後に実行する必要があるため、コンストラクターの最後で、theAttribute = anotherAttribute.getSelectedText();

しかし、それでも正しくありません。その段階ではフィールドは空なので、フィールドから結果を計算してみるのは意味がありません。計算はエンドユーザーが制御し、アクションで実行する必要があります。調べてくださいActionListener-それはフィールドに追加することができ、発砲しますEnter

于 2012-09-01T01:43:47.353 に答える
2

の2つのインスタンスがあるJComboBoxため、このは、最初のコンボでの選択が2番目のコンボでの表示をどのように変更できるかを示しています。たとえばFahrenheit、最初のコンボで選択すると、2番目のコンボのモデルがCelsiusまたはのみを表示するように変更されますKelvin。等。

補遺:@Andrewが示唆しているように、4つのインスタンス変数すべての初期化をコンストラクターに移動する必要があります。これがmain()私があなたのコードをテストするために使用したものです:

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            TempConverter f = new TempConverter();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.pack();
            f.setVisible(true);
        }
    });
}
于 2012-09-01T02:05:46.330 に答える