Java Swing实现简单的体重指数(BMI)计算器功能示例

 更新时间:2017年12月14日 08:58:06   作者:Hisom  
这篇文章主要介绍了Java Swing实现简单的体重指数(BMI)计算器功能,涉及Java Swing窗口组件布局、响应及数值运算相关操作技巧,需要的朋友可以参考下

本文实例讲述了Java Swing实现简单的体重指数(BMI)计算器功能。分享给大家供大家参考,具体如下:

BMI,Body Mass Index,身体质量指数,是用体重公斤数 除以 身高米数平方得出的,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。

而本文通过运用Java Swing实现了一个简单的BMI计算器。虽然现在网页上也有相应的网页应用,但是能够做出这个计算器来,还是有点成就感的,希望自己以后做出更多比这个好的应用。

最终运行效果:

功能:可以选择三个标准:中国、亚洲、WHO,计算结果稍有不同

计算公式:BMI = weight / (height*height)   即 体重公斤数 除以 身高米数平方

package WeightIndex;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
import java.util.regex.*;
public class WeightIndex extends JFrame {
 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private JPanel contentPane;
 private JLabel titleLabel;
 private JPanel contentPanel;
 private JButton submitButton;
 private ButtonGroup bg;
 private JPanel sexPanel;
 private JRadioButton ChinaRadio;
 private JRadioButton AsiaRadio;
 private JRadioButton WHORadio;
 private JPanel whPanel;
 private JLabel heightLabel;
 private JLabel weightLabel;
 private JTextField heightText;
 private JTextField weightText;
 private JPanel consolePanel;
 private JLabel consoleLabel;
 private JTextField consoleText;
 private double weight;
 private double height;
 private double BMI;
 /**
  * Launch the application.
  */
 public static void main(String[] args) {
  EventQueue.invokeLater(new Runnable() {
   public void run() {
    try {
     WeightIndex frame = new WeightIndex();
     frame.pack();
     frame.setVisible(true);
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
  });
 }
 /**
  * Create the frame.
  */
 public WeightIndex() {
  setTitle("脚本之家 - 身高体重指数计算器v1.0");
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setBounds(100, 100, 450, 300);
  //主容器
  contentPane = new JPanel();
  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  contentPane.setLayout(new BorderLayout(0, 0));
  setContentPane(contentPane);
  //标题,主容器北
  titleLabel = new JLabel("身高体重指数计算器");
  titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
  contentPane.add(titleLabel, BorderLayout.NORTH);
  //存放选项的panel,主容器中
  contentPanel = new JPanel();
  contentPanel.setLayout(new BorderLayout());
  contentPane.add(contentPanel,BorderLayout.CENTER);
  //提交按钮,主容器南
  submitButton = new JButton("计算");
  contentPane.add(submitButton, BorderLayout.SOUTH);
  //存放性别选择的panel,选项北
  bg = new ButtonGroup();
  sexPanel = new JPanel();
  sexPanel.setLayout(new FlowLayout());
  contentPanel.add(sexPanel,BorderLayout.NORTH);
  ChinaRadio = new JRadioButton("中国标准");
  ChinaRadio.setSelected(true);
  AsiaRadio = new JRadioButton("亚洲标准");
  WHORadio = new JRadioButton("WHO(世界卫生组织)标准");
  bg.add(ChinaRadio);
  bg.add(AsiaRadio);
  bg.add(WHORadio);
  sexPanel.add(ChinaRadio);
  sexPanel.add(AsiaRadio);
  sexPanel.add(WHORadio);
  //存放身高体重的panel,选项中
  whPanel = new JPanel();
  whPanel.setLayout(new FlowLayout());
  contentPanel.add(whPanel,BorderLayout.CENTER);
  heightLabel = new JLabel("身高(米/m):");
  weightLabel = new JLabel("体重(千克/kg):");
  heightText = new JTextField(10);
  heightText.setToolTipText("请输入身高");
  weightText = new JTextField(10);
  weightText.setToolTipText("请输入体重");
  whPanel.add(heightLabel);
  whPanel.add(heightText);
  whPanel.add(weightLabel);
  whPanel.add(weightText);
  //结果
  consolePanel = new JPanel();
  consolePanel.setLayout(new FlowLayout());
  consoleLabel = new JLabel("你的身体质量指数为:");
  consoleText = new JTextField(28);
  consoleText.setEditable(false);
  consolePanel.add(consoleLabel);
  consolePanel.add(consoleText);
  contentPanel.add(consolePanel,BorderLayout.SOUTH);
  submitButton.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    String hstr = heightText.getText();
    String wstr = weightText.getText();
    Pattern pattern = Pattern.compile("^[0-9]+(.[0-9]+)?$");
    Matcher hisNum = pattern.matcher(hstr);
    Matcher wisNum = pattern.matcher(wstr);
    boolean acc = true;
    if( !hisNum.matches()|| !wisNum.matches()){
      acc = false;
    }
    if(acc)
    {
     height = Double.parseDouble(hstr);
     weight = Double.parseDouble(wstr);
     BMI = weight / (height*height);
     DecimalFormat df = new DecimalFormat("#.0");
     String out = "";
     if(ChinaRadio.isSelected())
     {
      if(BMI<18.5)
       out = "偏瘦,瘦骨嶙峋的,多吃点吧!";
      else if(BMI<23.9)
       out = "正常,棒棒哒!";
      else if(BMI<28)
       out = "偏胖,你胖你就运动减肥!";
      else if(BMI>=28)
       out = "肥胖,现在减肥来的及!";
      else
       out ="外星人派来的你哦,请重新输入!";
     }
     else if(AsiaRadio.isSelected())
     {
      if(BMI<18.5)
       out = "偏瘦,瘦骨嶙峋的,多吃点吧!";
      else if(BMI<22.9)
       out = "正常,棒棒哒!";
      else if(BMI<24.9)
       out = "偏胖,你胖你就运动减肥!";
      else if(BMI<30)
       out = "肥胖,现在减肥来的及!";
      else if(BMI>=30)
       out = "重度肥胖,不是一般人,赶紧减肥吧!";
      else
       out ="外星人派来的你哦,请重新输入!";
     }
     else
     {
      if(BMI<18.5)
       out = "偏瘦,瘦骨嶙峋的,多吃点吧!";
      else if(BMI<24.9)
       out = "正常,棒棒哒!";
      else if(BMI<29.9)
       out = "偏胖,你胖你就运动减肥!";
      else if(BMI<34.9)
       out = "肥胖,现在减肥来的及!";
      else if(BMI<39.9)
       out = "重度肥胖,不是一般人,赶紧减肥吧!";
      else if(BMI>=40)
       out = "极重度肥胖,那可能得去医院看看咯!";
      else
       out ="外星人派来的你哦,请重新输入!";
     }
     consoleText.setText("你的指数为:"+df.format(BMI)+",你的健康状况为:"+out);
    }
   }
  });
 }
}

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • java实现留言板功能实例

    java实现留言板功能实例

    这篇文章主要为大家详细介绍了JSP+JavaBean的留言板技术 ,JavaWeb登陆功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 使用 Spring Boot Admin 监控应用状态的详细过程

    使用 Spring Boot Admin 监控应用状态的详细过程

    这篇文章主要介绍了使用 Spring Boot Admin 监控应用状态,该模块采集应用的内部信息,并暴露给外部的模块,支持 HTTP 和 JMX,并可以与一些第三方监控系统(如 Prometheus)整合,需要的朋友可以参考下
    2022-09-09
  • SpringCloud网关Gateway架构解析

    SpringCloud网关Gateway架构解析

    这篇文章主要介绍了SpringCloud网关Gateway架构解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Gson中@JsonAdater注解的几种方式总结

    Gson中@JsonAdater注解的几种方式总结

    这篇文章主要介绍了Gson中@JsonAdater注解的几种方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java非法字符: ‘\ufeff‘问题及说明

    Java非法字符: ‘\ufeff‘问题及说明

    这篇文章主要介绍了Java非法字符: ‘\ufeff‘问题及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • spring-mvc/springboot使用MockMvc对controller进行测试

    spring-mvc/springboot使用MockMvc对controller进行测试

    这篇文章主要介绍了spring-mvc/springboot使用MockMvc对controller进行测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • spring中时间格式化的两种方法示例讲解

    spring中时间格式化的两种方法示例讲解

    这篇文章主要介绍了spring中时间格式化的两种方法,方法一自己格式化,方法二通过配置,结合实例代码讲解的非常详细,文中补充介绍了Spring项目中时间格式化的方法,需要的朋友可以参考下
    2023-08-08
  • 详解Spring框架下向异步线程传递HttpServletRequest参数的坑

    详解Spring框架下向异步线程传递HttpServletRequest参数的坑

    这篇文章主要介绍了详解Spring框架下向异步线程传递HttpServletRequest参数的坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • java Split 实现去除一个空格和多个空格

    java Split 实现去除一个空格和多个空格

    这篇文章主要介绍了java Split 实现去除一个空格和多个空格,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • SpringBoot中数据传输对象(DTO)的实现

    SpringBoot中数据传输对象(DTO)的实现

    本文主要介绍了SpringBoot中数据传输对象(DTO)的实现,包括了手动创建DTO、使用ModelMapper和Lombok创建DTO的示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07

最新评论