You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java GUI温度计算器故障:JLabel5无法正常显示转换结果

修复你的GUI温度转换器问题

嘿,我看了你的代码,确实找到了几个关键问题,咱们一步步来修复:

问题梳理

  • 变量遮蔽问题:在actionPerformed方法里,你重新定义了和类成员变量同名的label5(String类型)和word1(double类型),这直接覆盖了原本的JLabel和JTextField对象,导致你无法调用setText()这类组件方法。
  • 公式运算符错误:温度转换里误用了取余运算符%,正确的应该是除法运算符/,取余是求两个数相除的余数,不是用来做转换计算的。
  • 结果赋值逻辑混乱:你把计算结果和setText的参数搞反了,应该先算出正确的转换值,再把这个值设置到label5上。

修复后的完整代码

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

public class GUI implements ActionListener{
    JFrame frame;
    JPanel contentPane;
    JLabel label1, label2, label3, label4, label5;
    JTextField word1;
    JButton Celcius, Fahrenheit;

    public GUI(){
        frame = new JFrame("Temperature Convertor");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Grid layout
        contentPane = new JPanel();
        contentPane.setLayout(new GridLayout(0, 2, 10, 5));
        contentPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
        contentPane.setBackground(Color.black);

        label1 = new JLabel("Temperature Convertor");
        label1.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        label1.setBorder(BorderFactory.createEmptyBorder(30,30,30,30));
        contentPane.add(label1);

        label2 = new JLabel(new ImageIcon("image1.jpg"));
        label2.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        label2.setBorder(BorderFactory.createEmptyBorder(30,30,30,30));
        contentPane.add(label2);

        label3 = new JLabel("Enter Temperature: ");
        label3.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        label3.setBorder(BorderFactory.createEmptyBorder(30,30,30,30));
        contentPane.add(label3);

        word1 = new JTextField(10);
        contentPane.add(word1);

        Celcius = new JButton("Celcius");
        Celcius.setAlignmentX(JButton.CENTER_ALIGNMENT);
        Celcius.setActionCommand("Celcius");
        Celcius.addActionListener(this);
        contentPane.add(Celcius);

        Fahrenheit = new JButton("Fahrenheit");
        Fahrenheit.setAlignmentX(JButton.CENTER_ALIGNMENT);
        Fahrenheit.setActionCommand("Fahrenheit");
        Fahrenheit.addActionListener(this);
        contentPane.add(Fahrenheit);

        label4 = new JLabel("The Coverted Temperature is: ");
        label4.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        label4.setBorder(BorderFactory.createEmptyBorder(30,30,30,30));
        contentPane.add(label4);

        label5 = new JLabel("");
        label5.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        label5.setBorder(BorderFactory.createEmptyBorder(30,30,30,30));
        contentPane.add(label5);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent event){
        String eventName = event.getActionCommand();
        // 先获取输入的温度值,注意捕获可能的格式异常
        try {
            double inputTemp = Double.parseDouble(word1.getText());
            String result;

            if (eventName.equals("Celcius")){
                // 华氏转摄氏:C = (F - 32) * 5/9
                double celsius = (inputTemp - 32) * 5 / 9;
                result = String.format("%.2f Degree's Celsius", celsius);
            } else if (eventName.equals("Fahrenheit")){
                // 摄氏转华氏:F = C * 9/5 + 32
                double fahrenheit = inputTemp * 9 / 5 + 32;
                result = String.format("%.2f Degree's Fahrenheit", fahrenheit);
            } else {
                result = "Invalid operation";
            }
            // 设置结果到label5
            label5.setText(result);
        } catch (NumberFormatException e) {
            label5.setText("请输入有效的数字!");
        }
    }

    public static void main(String[] args){
        GUI g = new GUI();
    }
}

额外优化点

  • 加了try-catch来处理用户输入非数字的情况,避免程序崩溃
  • 用String.format()让结果显示更美观(保留两位小数)
  • 修正了转换公式的注释,让逻辑更清晰

内容的提问来源于stack exchange,提问作者Gin Oakain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:50:22