Java Swing实现简单的体重指数(BMI)计算器功能示例
作者:Hisom 发布时间:2022-12-16 09:34:56
标签: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程序设计有所帮助。
来源:http://blog.csdn.net/u010992313/article/details/72083337


猜你喜欢
- 目录1、前言2、实例1、前言法存取数据。除此之外,还可以控制数据的存取方式。在面向对象编程中,大多数都是以类作为数据封装的基本单位。类将数据
- 前言本章内容主要研究一下java高级特性-反射、android注解、和 * 的使用,通过了解这些技术,可以为了以后实现组件化或者Api h
- 先给大家这是下效果图:谷歌提供的v4包,ViewPager在布局文件中,先添加<android.support.v4.view.Vie
- 一、线程的状态NEW: 安排了工作, 还未开始行动RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.BLOCKED: 这几
- Java 日期转换涉及的核心类:Date类、SimpleDateFormat类、Calendar类一、 Date型与long型Date型转换
- 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些
- 一:软键盘自动弹出。private EditText top_middle;//输入框//-------------------------
- ExecutorsExecutors 是一个Java中的工具类. 提供工厂方法来创建不同类型的线程池.从上图中也可以看出, Executor
- 排查@CacheEvict注解失效我简单看了一下《Spring实战》中的demo,然后就应用到业务代码中了,本以为如此简单的事情,竟然在代码
- 通过MAVEN完成 Mybatis 逆向工程1. POM文件中添加插件在 pom 文件的build 标签中 添加 plugin 插件和 数据
- 一、使用#定义参数1. 持久层接口添加根据名字内容模糊查询方法// 根据名字内容模糊查询 List<User
- 本文实例为大家分享了Unity实现新手引导镂空效果的具体代码,供大家参考,具体内容如下一、实现思路创建有8个顶点的Mesh,内外边界都是四边
- Spring或SpringBoot开启事务以后无法返回自增主键场景:保存订单和订单详情,订单详情需要订单id,数据库中的订单表是自增主键,开
- 本文实例讲述了Android开发之DialogFragment用法。分享给大家供大家参考,具体如下:背景Android 官方推荐使用 Dia
- 最近在写我们大三项目的一个视频文件上传的页面,实现后台对上传的进度进行监听,然后将监听的信息返回给前台页面。前台的页面效果图:前台进度条控件
- 前一段时间粗略看了一下《深入Java虚拟机 第二版》,可能是因为工作才一年的原因吧,看着十分的吃力。毕竟如果具体到细节的话,Java虚拟机涉
- 为什么我们要爬取数据在大数据时代,我们要获取更多数据,就要进行数据的挖掘、分析、筛选,比如当我们做一个项目的时候,需要大量真实的数据的时候,
- 在查询时经常出现一对多”的关系,所有会出现嵌套对象的情况,Mybatis在resultMap提供了collection标
- 在使用EL时,其实EL是先看标识符是否是其隐式对象之一,如果不是,才从四个域(page、request、session、applicatio
- 一.前言RabbitMQ的TTL全称为Time-To-Live,表示的是消息的有效期。消息如果在队列中一直没有被消费并且存在时间超过了TTL