Java Swing實現(xiàn)簡單的體重指數(shù)(BMI)計算器功能示例
本文實例講述了Java Swing實現(xiàn)簡單的體重指數(shù)(BMI)計算器功能。分享給大家供大家參考,具體如下:
BMI,Body Mass Index,身體質(zhì)量指數(shù),是用體重公斤數(shù) 除以 身高米數(shù)平方得出的,是目前國際上常用的衡量人體胖瘦程度以及是否健康的一個標(biāo)準(zhǔn)。
而本文通過運用Java Swing實現(xiàn)了一個簡單的BMI計算器。雖然現(xiàn)在網(wǎng)頁上也有相應(yīng)的網(wǎng)頁應(yīng)用,但是能夠做出這個計算器來,還是有點成就感的,希望自己以后做出更多比這個好的應(yīng)用。
最終運行效果:

功能:可以選擇三個標(biāo)準(zhǔn):中國、亞洲、WHO,計算結(jié)果稍有不同
計算公式:BMI = weight / (height*height) 即 體重公斤數(shù) 除以 身高米數(shù)平方
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("腳本之家 - 身高體重指數(shù)計算器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);
//標(biāo)題,主容器北
titleLabel = new JLabel("身高體重指數(shù)計算器");
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("中國標(biāo)準(zhǔn)");
ChinaRadio.setSelected(true);
AsiaRadio = new JRadioButton("亞洲標(biāo)準(zhǔn)");
WHORadio = new JRadioButton("WHO(世界衛(wèi)生組織)標(biāo)準(zhǔn)");
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);
//結(jié)果
consolePanel = new JPanel();
consolePanel.setLayout(new FlowLayout());
consoleLabel = new JLabel("你的身體質(zhì)量指數(shù)為:");
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 = "肥胖,現(xiàn)在減肥來的及!";
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 = "肥胖,現(xiàn)在減肥來的及!";
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 = "肥胖,現(xiàn)在減肥來的及!";
else if(BMI<39.9)
out = "重度肥胖,不是一般人,趕緊減肥吧!";
else if(BMI>=40)
out = "極重度肥胖,那可能得去醫(yī)院看看咯!";
else
out ="外星人派來的你哦,請重新輸入!";
}
consoleText.setText("你的指數(shù)為:"+df.format(BMI)+",你的健康狀況為:"+out);
}
}
});
}
}
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
使用?Spring?Boot?Admin?監(jiān)控應(yīng)用狀態(tài)的詳細過程
這篇文章主要介紹了使用?Spring?Boot?Admin?監(jiān)控應(yīng)用狀態(tài),該模塊采集應(yīng)用的內(nèi)部信息,并暴露給外部的模塊,支持?HTTP?和?JMX,并可以與一些第三方監(jiān)控系統(tǒng)(如?Prometheus)整合,需要的朋友可以參考下2022-09-09
SpringCloud網(wǎng)關(guān)Gateway架構(gòu)解析
這篇文章主要介紹了SpringCloud網(wǎng)關(guān)Gateway架構(gòu)解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
Gson中@JsonAdater注解的幾種方式總結(jié)
這篇文章主要介紹了Gson中@JsonAdater注解的幾種方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
spring-mvc/springboot使用MockMvc對controller進行測試
這篇文章主要介紹了spring-mvc/springboot使用MockMvc對controller進行測試,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11
詳解Spring框架下向異步線程傳遞HttpServletRequest參數(shù)的坑
這篇文章主要介紹了詳解Spring框架下向異步線程傳遞HttpServletRequest參數(shù)的坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03
java Split 實現(xiàn)去除一個空格和多個空格
這篇文章主要介紹了java Split 實現(xiàn)去除一個空格和多個空格,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
SpringBoot中數(shù)據(jù)傳輸對象(DTO)的實現(xiàn)
本文主要介紹了SpringBoot中數(shù)據(jù)傳輸對象(DTO)的實現(xiàn),包括了手動創(chuàng)建DTO、使用ModelMapper和Lombok創(chuàng)建DTO的示例,具有一定的參考價值,感興趣的可以了解一下2024-07-07

