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

Java编写公里英里互转Swing程序点击转换无输出问题排查

问题排查与修复方案

核心问题

你猜测的问题方向完全正确,同时还有两个额外问题需要修正:

  • 事件监听器注册位置错误:button.addActionListener(this) 写在了actionPerformed方法内部。actionPerformed是监听器触发后才会执行的回调方法,你从未给按钮注册过监听器的前提下,这个方法永远不会被调用,监听器自然也永远不会被注册,点击按钮没有任何反应。
  • 缺少公里转英里的分支逻辑,当前只实现了半段转换流程。
  • 原有转换系数写反:英里转公里的系数应为1.609左右,0.62是公里转英里的系数。

修复步骤

  1. 将button.addActionListener(this)从actionPerformed方法中移到构造方法Converter()里,在界面初始化完成后就给按钮绑定监听器
  2. 补充cb2选中状态下的公里转英里计算逻辑
  3. 修正转换系数,补充单位输出说明
  4. 增加窗口关闭后自动退出程序的配置,避免进程残留

修正后的完整代码

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

public class Converter extends JFrame implements ActionListener {
    JLabel label = new JLabel("Distance : ");
    JTextField input = new JTextField(10);
    JButton button = new JButton("Convert");
    JTextArea output = new JTextArea(10,15);
    CheckboxGroup cbg = new CheckboxGroup();
    Checkbox cb1 = new Checkbox("Convert MILES to KM", cbg, true);
    Checkbox cb2 = new Checkbox("Convert KM to MILES", cbg, false);
    

    public static void main(String args[]){
        Converter s = new Converter();
        s.setVisible(true);
        
    }

    public Converter(){
        setLayout(null);
        setSize(300,400);
        // 配置窗口关闭后退出程序
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //left-down-width-height
        cb1.setBounds(60,30,150,30);
        cb2.setBounds(60,60,150,30);
        label.setBounds(30,90,120,30);
        input.setBounds(90,95,170,20);
        button.setBounds(100,130,90,30);
        output.setBounds(45,168,200,165);
                
        add(cb1);
        add(cb2);
        add(label);
        add(input);
        add(button);
        add(output);
        // 初始化阶段就给按钮注册监听器
        button.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e){
        if (e.getSource() == button ){
            double inputVal = Double.parseDouble(input.getText());
            double result;
            if (cb1.getState() ) {
                // 英里转公里:1英里≈1.60934公里
                result = inputVal * 1.60934;
                output.setText(inputVal + " 英里 = " + String.format("%.2f", result) + " 公里");
            } else {
                // 公里转英里:1公里≈0.621371英里
                result = inputVal * 0.621371;
                output.setText(inputVal + " 公里 = " + String.format("%.2f", result) + " 英里");
            }
        }
    }        
}

内容的提问来源于stack exchange,提问作者Vishnudas V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:27:05