【问题标题】:Problems updating labels using variables from if-statements (Java)使用 if 语句中的变量更新标签的问题 (Java)
【发布时间】:2013-06-02 16:14:18
【问题描述】:

首先,我是 Java 和编程的新手(Matlab 除外),因此非常感谢简单的答案 :-)。

我正在尝试创建一个温度转换器(带有 GUI),我需要更新一些标签。一开始效果很好,但现在我必须使用 if 语句中的值。这会导致我尝试更新标签时出错:

tempKelvin 无法解析为变量

所有的动作都是在点击“转换”按钮时发生的,代码在这里:

// Create and add convert button
    JButton fahrenheitButton = new JButton("Convert");
    fahrenheitButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            // Check if input is of type double and perform action
            if (isNumber(tempTextField.getText())) {
                double  inputTemp = Double.parseDouble(tempTextField.getText());

                // Convert from Kelvin
                if (((String) unitDropdown.getSelectedItem()).equals("Kelvin")) {
                    int tempKelvin     = (int) (inputTemp);
                    int tempCelcius    = (int) (inputTemp - 273.15);
                    int tempFahrenheit = (int) ((inputTemp - 273.15) * (9/5)  + 32);

                // Convert from Celsius
                } else if (((String) unitDropdown.getSelectedItem()).equals("Celsius")) {
                    int tempKelvin     = (int) (inputTemp + 273.15);
                    int tempCelcius    = (int) (inputTemp);
                    int tempFahrenheit = (int) (inputTemp  * (9/5)  + 32);

                // Convert from Fahrenheit
                } else if (((String) unitDropdown.getSelectedItem()).equals("Fahrenheit")) {
                    int tempKelvin     = (int) ((inputTemp - 32) * (5/9) + 273.15);
                    int tempCelcius    = (int) ((inputTemp - 32) * (5/9));
                    int tempFahrenheit = (int) ((inputTemp - 273.15) * (9/5)  + 32);

                // If none of the above was selected, it's an error...
                } else {
                    int tempKelvin = 0;
                    int tempCelcius = 0;
                    int tempFahrenheit = 0;
                    warningLabel.setText("Oops, this doesn't look good!");
                }

                // Update labels
                kelvinLabel.setText(tempKelvin + " K");
                celsiusLabel.setText(tempCelcius + " C");
                fahrenheitLabel.setText(tempFahrenheit + " F");
                warningLabel.setText("");


            } else {
                warningLabel.setText("Input must be numeric!");
            }
        }
    });

    fahrenheitButton.setBounds(20, 45, 89, 23);
    contentPane.add(fahrenheitButton);

任何帮助将不胜感激,谢谢!!

【问题讨论】:

  • 您需要将 tempKelvin 变量移到 if 语句之外。

标签: java swing jbutton jlabel settext


【解决方案1】:

您需要在 if 语句之外定义 int tempKelvin 并重用它,如下所述:

// Create and add convert button
    JButton fahrenheitButton = new JButton("Convert");
    fahrenheitButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            // Check if input is of type double and perform action
            if (isNumber(tempTextField.getText())) {
                double  inputTemp = Double.parseDouble(tempTextField.getText());

                int tempKelvin = -1;
                int tempCelcius = -1;
                int tempFahrenheit = -1;
                // Convert from Kelvin
                if (((String) unitDropdown.getSelectedItem()).equals("Kelvin")) {
                    tempKelvin    = (int) (inputTemp);
                    tempCelcius    = (int) (inputTemp - 273.15);
                    tempFahrenheit = (int) ((inputTemp - 273.15) * (9/5)  + 32);

                // Convert from Celsius
                } else if (((String) unitDropdown.getSelectedItem()).equals("Celsius")) {
                    tempKelvin     = (int) (inputTemp + 273.15);
                    tempCelcius    = (int) (inputTemp);
                    tempFahrenheit = (int) (inputTemp  * (9/5)  + 32);

                // Convert from Fahrenheit
                } else if (((String) unitDropdown.getSelectedItem()).equals("Fahrenheit")) {
                    tempKelvin     = (int) ((inputTemp - 32) * (5/9) + 273.15);
                    tempCelcius    = (int) ((inputTemp - 32) * (5/9));
                    tempFahrenheit = (int) ((inputTemp - 273.15) * (9/5)  + 32);

                // If none of the above was selected, it's an error...
                } else {
                    tempKelvin = 0;
                    tempCelcius = 0;
                    tempFahrenheit = 0;
                    warningLabel.setText("Oops, this doesn't look good!");
                }

                // Update labels
                kelvinLabel.setText(tempKelvin + " K");
                celsiusLabel.setText(tempCelcius + " C");
                fahrenheitLabel.setText(tempFahrenheit + " F");
                warningLabel.setText("");


            } else {
                warningLabel.setText("Input must be numeric!");
            }
        }
    });

    fahrenheitButton.setBounds(20, 45, 89, 23);
    contentPane.add(fahrenheitButton);

【讨论】:

    【解决方案2】:

    您的问题是您在每个 if [else] 语句中创建一个新的临时变量。这就是为什么变量在这些语句之外不存在的原因。

    【讨论】:

      【解决方案3】:

      您正在引用超出其范围的“临时”变量。 它们在 if/else 条件语句的每个语句中声明,但在条件语句关闭后引用(在注释“更新标签”下)。

      一种解决方案是在条件语句之前声明变量,并且只在条件中分配它们。

      【讨论】:

        【解决方案4】:

        你的神奇词是:范围。 因为您的变量是在您的 if 语句中定义的,所以它实际上会在该语句之后“消失”(如果您愿意,则为“范围”) - 结束。

        只需将变量提取到要在其中引用它的最外层范围即可。祝你好运!

        【讨论】:

          【解决方案5】:

          你最好这样做:

          int tempKelvin     = 0;
          int tempCelcius    = 0;
          int tempFahrenheit = 0;
          
          if(condition1){
              ///
          }else if(condition2){
              //
          }else if(condition3){
              //
          }else{
              //
          }
          

          在if里面,不需要重新声明int函数,只要tempKelvin=....;

          【讨论】:

          • 我太接近了...我尝试在 if 语句之外声明它们,但我忘记删除语句中的声明,导致重复错误。感谢您的帮助(以及该死的快速帮助)。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-24
          • 1970-01-01
          相关资源
          最近更新 更多