接续昨天的程序,增加事件监听者至 BMI 类别。
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JOptionPane;
public class BMI2 extends JFrame{
private final JLabel label1, label2, label3;
private final JTextField textField, textField2;
private final JButton btn;
public BMI2(){
super("计算 BMI");
super.setLayout(null);
label1 = new JLabel("请输入体重(公斤):");
label1.setBounds(70, 50, 150, 20);
add(label1);
textField = new JTextField("0");
textField.setBounds(230, 50, 100, 20);
add(textField);
label2 = new JLabel("请输入身高(公尺):");
label2.setBounds(70, 100, 150, 20);
add(label2);
textField2 = new JTextField("0");
textField2.setBounds(230, 100, 100, 20);
add(textField2);
btn = new JButton("计算");
btn.setBounds(70, 150, 260, 20);
add(btn);
ButtonHandler handler = new ButtonHandler();
btn.addActionListener(handler);
label3 = new JLabel("BMI:");
label3.setBounds(150, 200, 100, 20);
add(label3);
}
private class ButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent event){
double weight = 0, height = 0, bmi = 0;
try{
weight = Double.parseDouble(textField.getText()); //取得文字框文字
height = Double.parseDouble(textField2.getText());
bmi = weight / (height * height);
label3.setText("BMI:" + bmi);
}catch(Exception e){
JOptionPane.showMessageDialog(null, "请输入数字", "输入错误", JOptionPane.ERROR_MESSAGE);
}
}
}
}
import javax.swing.JFrame;
public class CalculateBMI2 {
public static void main(String[] args){
BMI2 bmi = new BMI2();
bmi.setSize(400, 300); //设定宽,长
bmi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设定预设的关闭视窗
bmi.setVisible(true); //视窗预设是不可见的
}
}
我们可以看到 JButton 会产生任何 ActionListener 物件能够处里的 ActionEvent。建立一个 private 内层类别 ButtonHandler 的物件,再使用 addActionListener 将之注册为每个 JButton 的事件处理常式。 ButtonHandler 类别宣告了 actionPerformed,取得两个 JTextField 的文字,经过运算後将 BMI 呈现出来。若是输入不为数字,则跳出警告框提示。
除了 JButton 外,昨天还有提到像是 JCheckBox、JComboBox、JList 等都可以做为事件来源者,还记得我们前几天写的猜数字游戏吗?也可以试试看把它变成可以互动的游戏视窗,似乎看起来就更专业了!
用了三天的时间简单介绍了图形使用者介面,相关的内容还有非常多,鼓励大家可以多多尝试,对 Swing 多加了解。
这是这 30 天教学的最後一个单元了,不知道大家是不是对 Java 有一定的了解了,明天最後一天,一起来回顾学到了些什麽吧!
<<: 用React刻自己的投资Dashboard Day14 - 解决重复发送API请求的问题
>>: 【15】图片标准化 [0,1] 与 [-1,+1] 的差别实验
一、前言 搭配上一篇文章有提到 Webpack 之运作阶段,接下来需要了解在每个阶段又是如何运作...
在过去 MySQL 是一款免费开源的关联式资料库,在众多的中小型专案中做为资料库使用,在 2009 ...
将几篇 Boxenn 相关文章整理成分类目录(范例 GitHub repository 建置中,完成...
1. 什麽是元素显示模式 元素显示模式就是元素(标签)以什麽方式进行显示 作用 : 网页的标签非常多...
-化名(Pseudonymization) 假名(Pseudonymized)数据可以通过添加信息...