这个想法就是之前看到的一个视频,输入身高,按下开始计算按钮之后直接输出身高。说写就写。
目录
界面设计:
首先就是确定这个框架里面有什么东西,我打算就是简单一点,一个计算身高的按钮,一个把重置按钮,输入的话是输入在文本框里面,输出是直接用标签来输出。
//组件数据
final JPanel panel=new JPanel();//面板
final JLabel heightLabel=new JLabel();//身高标签
final JTextField heightTextField=new JTextField();//身高文本框
final JLabel resultLabel=new JLabel();//计算结果标签
final JButton start=new JButton();//开始计算按钮
final JButton reset=new JButton();//重置按钮
public heightCalculatorJFrame() {
//初始化框架
initFrame();
//初始化面板
initPanel();
//绑定监听事件
buttonAction();
//窗体可见
this.setVisible(true);
}
//初始化框架
public void initFrame() {
//设置软件的标题
this.setTitle("身高计算器");
//设置窗体位置以及大小
this.setSize(500,300);
//设置窗体居中
this.setLocationRelativeTo(null);
//关闭按钮的动作为退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//初始化面板
public void initPanel() {
initModule();
//设置为不采用任何布局管理器,在Frame中设置没有效果,结果还是会被panel替代了
panel.setLayout(null);
//添加相关的组件
panel.add(heightLabel);
panel.add(heightTextField);
panel.add(resultLabel);
panel.add(start);
panel.add(reset);
this.setContentPane(panel);
}
//初始化组件
public void initModule() {
//初始化身高相关的组件
heightLabel.setText("身高:");
//设置字体的类型,加粗,和大小
heightLabel.setFont(new Font("Microsoft YaHei",Font.BOLD,40));
//标签的位置和大小
heightLabel.setBounds(30,30,100,50);
//文本框的位置和大小
heightTextField.setBounds(130,30,150,50);
//初始化计算结果相关的数据
resultLabel.setText("您的身高为:");
//设置字体的类型,加粗,和大小
resultLabel.setFont(new Font("Microsoft YaHei",Font.BOLD,30));
//标签的位置和大小
resultLabel.setBounds(30,80,400,100);
//开始计算按钮
start.setBounds(290,30,90,50);
start.setText("开始计算");
//重置按钮
reset.setBounds(390,30,90,50);
reset.setText("重置");
}
功能实现:
这个也是按钮事件绑定的三步走,事件源就是那两个按钮,监听源是ActionListener。
对接口的方法进行重写。
按钮绑定事件,自己实现的话就是绑定自己,用this。
我这里判断字符串是否满足浮点数的要求是用的正则表达式,这里用try…catch应该也行,但是要转换成浮点数来判断是否成功,我这用正则表达式就可以不需要转成浮点数了,直接输出即可。
public void buttonAction() {
//按钮绑定动作事件,和自己绑定,自己实现的监听的方法
start.addActionListener(this);
reset.addActionListener(this);
}
//必须重写actionPerformed方法
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JButton button =(JButton)e.getSource();//获得触发此次动作事件的按钮对象
String buttonName =e.getActionCommand();//获得触发此次动作事件的按钮的标签文本
if(buttonName.equals("开始计算")) {
//获取文本框内容
result=heightTextField.getText();
//正则表达式
String regex="(^[1-9]\\d*\\.\\d+$|^0\\.\\d+$|^[1-9]\\d*$|^0$)";
if(result.matches(regex)) {
resultLabel.setText("您的身高为:"+result+"cm");
}else {
//数据不对当然要弹出警告啦
//添加一个弹窗的警告
JDialog jDialog=new JDialog();//创建弹窗对象
jDialog.setTitle("警告");//设置弹窗标题,和Frame差不多,可能还要通过标签来提示
jDialog.setSize(500,600);//设置弹窗的大小
jDialog.setAlwaysOnTop(true);//让弹窗置顶
jDialog.setLocationRelativeTo(null);//让弹窗居中
jDialog.setModal(true);//弹窗不关闭则无法操作下面的界面
//设置字体的类型,加粗,和大小
warningLabel.setFont(new Font("Microsoft YaHei",Font.BOLD,30));
//输出警告提示符
warningLabel.setText("身高输入错误哦!!!,请合法输入呢");
//标签的位置和大小
warningLabel.setBounds(20,200,500,100);
//这个也要取消布局管理器才行
jDialog.getContentPane().setLayout(null);
//往弹窗中添加标签
jDialog.getContentPane().add(warningLabel);
jDialog.setVisible(true);//让弹窗显示出来
}
}else if(buttonName.equals("重置")) {
//清空文本框里面的内容
heightTextField.setText("");
}
}
完整代码:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class heightCalculatorJFrame extends JFrame implements ActionListener{
//主方法
public static void main(String[] args) {
heightCalculatorJFrame app=new heightCalculatorJFrame();
}
//组件数据
final JPanel panel=new JPanel();//面板
final JLabel heightLabel=new JLabel();//身高标签
final JTextField heightTextField=new JTextField();//身高文本框
final JLabel resultLabel=new JLabel();//计算结果标签
final JButton start=new JButton();//开始计算按钮
final JButton reset=new JButton();//重置按钮
final JLabel warningLabel=new JLabel();//警告标签,放在弹窗里面
//用来存储文本框输入的数据,因为不用计算,所以可以直接输出即可
String result="";
public heightCalculatorJFrame() {
//初始化框架
initFrame();
//初始化面板
initPanel();
//绑定监听事件
buttonAction();
//窗体可见
this.setVisible(true);
}
//初始化框架
public void initFrame() {
//设置软件的标题
this.setTitle("身高计算器");
//设置窗体位置以及大小
this.setSize(500,300);
//设置窗体居中
this.setLocationRelativeTo(null);
//关闭按钮的动作为退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//初始化面板
public void initPanel() {
initModule();
//设置为不采用任何布局管理器,在Frame中设置没有效果,结果还是会被panel替代了
panel.setLayout(null);
//添加相关的组件
panel.add(heightLabel);
panel.add(heightTextField);
panel.add(resultLabel);
panel.add(start);
panel.add(reset);
this.setContentPane(panel);
}
//初始化组件
public void initModule() {
//初始化身高相关的组件
heightLabel.setText("身高:");
//设置字体的类型,加粗,和大小
heightLabel.setFont(new Font("Microsoft YaHei",Font.BOLD,40));
//标签的位置和大小
heightLabel.setBounds(30,30,100,50);
//文本框的位置和大小
heightTextField.setBounds(130,30,150,50);
//初始化计算结果相关的数据
resultLabel.setText("您的身高为:");
//设置字体的类型,加粗,和大小
resultLabel.setFont(new Font("Microsoft YaHei",Font.BOLD,30));
//标签的位置和大小
resultLabel.setBounds(30,80,400,100);
//开始计算按钮
start.setBounds(290,30,90,50);
start.setText("开始计算");
//重置按钮
reset.setBounds(390,30,90,50);
reset.setText("重置");
}
public void buttonAction() {
//按钮绑定动作事件,和自己绑定,自己实现的监听的方法
start.addActionListener(this);
reset.addActionListener(this);
}
//必须重写actionPerformed方法
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JButton button =(JButton)e.getSource();//获得触发此次动作事件的按钮对象
String buttonName =e.getActionCommand();//获得触发此次动作事件的按钮的标签文本
if(buttonName.equals("开始计算")) {
//获取文本框内容
result=heightTextField.getText();
//正则表达式
String regex="(^[1-9]\\d*\\.\\d+$|^0\\.\\d+$|^[1-9]\\d*$|^0$)";
if(result.matches(regex)) {
resultLabel.setText("您的身高为:"+result+"cm");
}else {
//数据不对当然要弹出警告啦
//添加一个弹窗的警告
JDialog jDialog=new JDialog();//创建弹窗对象
jDialog.setTitle("警告");//设置弹窗标题,和Frame差不多,可能还要通过标签来提示
jDialog.setSize(500,600);//设置弹窗的大小
jDialog.setAlwaysOnTop(true);//让弹窗置顶
jDialog.setLocationRelativeTo(null);//让弹窗居中
jDialog.setModal(true);//弹窗不关闭则无法操作下面的界面
//设置字体的类型,加粗,和大小
warningLabel.setFont(new Font("Microsoft YaHei",Font.BOLD,30));
//输出警告提示符
warningLabel.setText("身高输入错误哦!!!,请合法输入呢");
//标签的位置和大小
warningLabel.setBounds(20,200,500,100);
//这个也要取消布局管理器才行
jDialog.getContentPane().setLayout(null);
//往弹窗中添加标签
jDialog.getContentPane().add(warningLabel);
jDialog.setVisible(true);//让弹窗显示出来
}
}else if(buttonName.equals("重置")) {
//清空文本框里面的内容
heightTextField.setText("");
}
}
}
总结:
这个算是我第一个写出来的Swing程序设计,有想法然后去实现,尽管最后没有实现会有遗憾,但是回头看去,自己早不是在原地踏步。