代码-Java图形界面 简易BMI计算器怎样设计算法

问题描述

Java图形界面 简易BMI计算器怎样设计算法

老师出差去了 布置作业做一个简易BMI计算器
写了半天才写出一个图形界面
不知道怎样实现键盘录入身高、体重,点击评估按钮得到BMI和结果(结果输出的是胖,瘦,正常三种情况)
代码、界面如下:

解决方案

你的核心问题是如何对按钮进行响应,需要看下ActionListener的相关方法。

    public class BMI extends JFrame{

    private JLabel lblHeight;
    private JLabel lblWeight;
    private JLabel lblBMI;
    private JLabel lblResult;

    private JButton btnRun;
    private JPanel pnlMain;
    private JTextField txtHeight;
    private JTextField txtWeight;
    private JTextField txtBMI;
    private JTextField txtResult;
    DecimalFormat dformat = new DecimalFormat("#.00");
    public BMI(){
        lblHeight = new JLabel("身高(米/m)");
        txtHeight = new JTextField(10);
        lblWeight = new JLabel("体重(千克/kg)");
        txtWeight = new JTextField(10);
        lblBMI = new JLabel("健康值(BMI)");
        txtBMI = new JTextField(10);
        lblResult = new JLabel("结果");
        txtResult = new JTextField(10);
        btnRun = new JButton("评估");
        pnlMain = new JPanel();
        pnlMain.setLayout(null);
        lblHeight.setBounds(100, 50, 80, 25);
        txtHeight.setBounds(200, 50, 100, 25);
        lblWeight.setBounds(100, 80, 80, 25);
        txtWeight.setBounds(200, 80, 100, 25);
        lblBMI.setBounds(100, 110, 80, 25);
        txtBMI.setBounds(200, 110, 100, 25);
        lblResult.setBounds(100, 170, 80, 25);
        txtResult.setBounds(200, 170, 100, 25);
        btnRun.setBounds(150, 140, 80, 25);

        pnlMain.add(lblHeight);
        pnlMain.add(txtHeight);
        pnlMain.add(lblWeight);
        pnlMain.add(txtWeight);
        pnlMain.add(lblBMI);
        pnlMain.add(txtBMI);
        pnlMain.add(lblResult);
        pnlMain.add(txtResult);
        pnlMain.add(btnRun);
        this.setContentPane(pnlMain);
        setSize(400,300);
        setTitle("健康评估");
        setVisible(true);
        setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);

        btnRun.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                if( txtWeight.getText() == null){
                    JOptionPane.showMessageDialog(null, "身高为空,请输入一个正值身高!");
                    return;
                }
                if( txtHeight.getText() == null){
                    JOptionPane.showMessageDialog(null, "体重为空,请输入一个正值体重!");
                    return;
                }
                double weight = Double.valueOf(txtWeight.getText());
                if(weight <= 0 ){
                    JOptionPane.showMessageDialog(null, "体重为0,请输入一个正值体重。");
                    return;
                }
                double height = Double.valueOf(txtHeight.getText());
                if(height <= 0 ){
                    JOptionPane.showMessageDialog(null, "身高为0,请输入一个正值身高。");
                    return;
                }
                double bmi = weight/height/height;
                txtBMI.setText(dformat.format(bmi));
                txtResult.setText(getResult(bmi));
            }

        });
    }
    private String getResult(double bmi) {
        // TODO Auto-generated method stub
        if(bmi < 18.5){
            return "瘦";
        }else if(bmi>=18.5 && bmi < 24){
            return "正常";
        }else{
            return "胖";
        }
    }

    public static void main(String[] args) {
        new BMI();
    }
}

解决方案二:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class BMI extends JFrame {

/**
 * 简易BMI计算机
 */
private static final long serialVersionUID = -2317974201224415240L;
private JLabel lblHeight;
private JLabel lblWeight;
private JLabel lblBMI;
private JLabel lblResult;

private JButton btnRun;
private JPanel pnlMain;
private JTextField txtHeight;
private JTextField txtWeight;
private JTextField txtBMI;
private JTextField txtResult;
DecimalFormat dformat = new DecimalFormat("#.00");

public BMI() {
    lblHeight = new JLabel("身高(米/m)");
    txtHeight = new JTextField(10);
    lblWeight = new JLabel("体重(千克/kg)");
    txtWeight = new JTextField(10);
    lblBMI = new JLabel("健康值(BMI)");
    txtBMI = new JTextField(10);
    lblResult = new JLabel("结果");
    txtResult = new JTextField(10);
    btnRun = new JButton("评估");
    pnlMain = new JPanel();
    pnlMain.setLayout(null);
    lblHeight.setBounds(100, 50, 80, 25);
    txtHeight.setBounds(200, 50, 100, 25);
    lblWeight.setBounds(100, 80, 80, 25);
    txtWeight.setBounds(200, 80, 100, 25);
    lblBMI.setBounds(100, 110, 80, 25);
    txtBMI.setBounds(200, 110, 100, 25);
    lblResult.setBounds(100, 170, 80, 25);
    txtResult.setBounds(200, 170, 100, 25);
    btnRun.setBounds(150, 140, 80, 25);

    pnlMain.add(lblHeight);
    pnlMain.add(txtHeight);
    pnlMain.add(lblWeight);
    pnlMain.add(txtWeight);
    pnlMain.add(lblBMI);
    pnlMain.add(txtBMI);
    pnlMain.add(lblResult);
    pnlMain.add(txtResult);
    pnlMain.add(btnRun);
    this.setContentPane(pnlMain);
    setSize(400, 300);
    setTitle("健康评估");
    setVisible(true);
    setResizable(false);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);

    btnRun.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if ("".equals(txtHeight.getText())) {
                JOptionPane.showMessageDialog(null, "身高为空,请输入一个正值身高!");
                return;
            }
            if ("".equals(txtWeight.getText())) {
                JOptionPane.showMessageDialog(null, "体重为空,请输入一个正值体重!");
                return;
            }
            double height = Double.valueOf(txtHeight.getText());
            if (height <= 0) {
                JOptionPane.showMessageDialog(null, "身高低于o.1cm,请输入一个正值身高。");
                return;
            }
            double weight = Double.valueOf(txtWeight.getText());
            if (weight <= 0) {
                JOptionPane.showMessageDialog(null, "体重小于0.1kg,请输入一个正值体重。");
                return;
            }
            // BMl=[体重(千克)/身高(米)]/2
            double bmi = weight / height / 2;
            txtBMI.setText(dformat.format(bmi));
            txtResult.setText(getResult(bmi));
        }

    });
}

private String getResult(double bmi) {
    // BMl<18.5为消瘦;BMl 在18.5~24.9之间为正常;BMl≥25为超重;
    if (bmi < 18.5) {
        return "瘦";
    } else if (bmi >= 18.5 && bmi < 25) {
        return "正常";
    } else {
        return "胖";
    }
}

public static void main(String[] args) {
    new BMI();
}

}

百度了一下BMI的计算公式,好像有几种,不过都差异不大,楼主问的算法应该不是问题了,
引用二楼的回答,判断输入是否空值,用null会出异常,所以我改成了"".equals(),应该差不多了。

解决方案三:

同问,有知道的吗?谢了!

时间: 2024-09-17 04:16:53

代码-Java图形界面 简易BMI计算器怎样设计算法的相关文章

Java图形界面开发之简易记事本_java

在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: package com.package3; /* * 功能:简易记事本的开发,可以保存文件,打开文件,退出记事本 * author:ywq */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*

java生成一个简易的计算器

下面的代码是生成一个简易的计算器. Calculator import java.awt.*; import java.awt.event.*; import javax.swing.*; class CalculatorPanel extends JPanel implements ActionListener { public CalculatorPanel() { setLayout(new BorderLayout()); display = new JTextField("0"

awt-关于java图形界面的问题

问题描述 关于java图形界面的问题 问题大概是这样的: 1.awt 2.在一个窗口中建了一个按钮,给这个按钮设置了监听器,点击它后会弹出窗口,但是我写了关闭方法,新弹出来的窗口仍然无法关闭,关闭父窗口就都关闭了. 3.还有一个就是重复点击这个按钮,会一直往外弹,这个怎么解决? 解决方案 可否贴上代码,供解答者调试呢? 这样说感觉也不太清楚呢. 解决方案二: 1.新弹出的窗口是JFrame的么,关闭时是否有其他代码在使用? 2.重复点击按钮会一直弹出,如果你只想弹出一个的话,你最好设置一个变量来

java图形界面的链表

问题描述 求java图形界面写的数据结构链表代码(完整代码),完善链表的输入删除功能 解决方案 解决方案二:链表分"图形"和"非图形"?不就是数据结构吗?解决方案三:他说的是想通过图形界面实现对链表的操作.

java图形界面之布局设计_java

在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计.java.awt中定义了多种布局类,每种布局类对应一种布局的策略.常用的有以下布局类: •FlowLayout,依次放置组件. •BoarderLayout,将组件放置在边界上. •CardLayout,将组件像扑克牌一样叠放,而每次只能显示其中一个组件. •GridLayout,将显示区域按行.列划分成一个个相等的格子,组件依次放入这些格子中. •GridBagLayout,将显示区域划分成许多矩形小单元

怎样让Java图形界面程序启动时没有控制台窗口?

程序|控制|图形 缺水的海豚 写了一篇文章介绍 如何在C/C++中调用Java的方法 . 写得相当好,谢谢! 文章中提到, Java跨平台的特性使Java越来越受开发人员的欢迎,但也往往会听到不少的抱怨:用Java开发的图形用户窗口界面每次在启动的时候都会跳出一个控制台窗口,这个控制台窗口让本来非常棒的界面失色不少.怎么能够让通过Java开发的GUI程序不弹出Java的控制台窗口呢? 有一个秘密(JDK文档中没提到),可以简单地解决这个问题.如果想运行Java图形界面程序,也用不着费劲写一个这样

请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊?

问题描述 请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊? 问题补充:恩恩,swing的!请问怎么改啊?xiaolv 写道 解决方案 JOptionPane.setDefaultLocale(Locale.CHINA);JOptionPane.showMessageDialog(null, "11", "22",JOptionPane.INFORMATION_MESSAGE);这个按钮自动集成多语言.只能通来Locale来改.想要OK就用Loca

JAVA图形界面(GUI)之容器

在Swing中,容器可以用来组织界面布局,容器中可以添加容器和组件.常用的有如下几种: 顶层容器:JFrame,JApplet,JDialog,JWindow 中间容器:JPanel,JScrollPane,JSplitPane,JToolBar 特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame,JLayeredPane,JRootPane. 这篇博客将抽取其中几个常用容器为大家介绍,剩余的在之后用到了再介绍. JFrame JFrame是是个顶层容器,是屏幕上window

swing-小弟想问一下,当前用来开发JAVA图形界面的主流是什么??

问题描述 小弟想问一下,当前用来开发JAVA图形界面的主流是什么?? AWT,SWT,SWING这三种哪个用户比较多?求各位前辈解答, 解决方案 swing用的比较多 解决方案二: swing 用的人多,但是比较麻烦 解决方案三: swing 用的人多,但是比较麻烦 解决方案四: swing 用的人多,但是比较麻烦 解决方案五: java web的整个流程是可以的. 解决方案六: java web的整个流程是可以的. 解决方案七: 现在都是搞java web开发了 没人用swing了 解决方案八