前言
最近学习了java的窗体,运用了java中的swing库以及awt库
Swing是一个用于开发Java应用程序用户界面的开发工具包。
以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event。
AWT(Abstract Window Toolkit),中文译为抽象窗口工具包,该包提供了一套与本地图形界面进行交互的接口,是Java提供的用来建立和设置Java的图形用户界面的基本工具。AWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,称之为peers,当利用AWT编写图形用户界面时,实际上是在利用本地操作系统所提供的图形库。由于不同操作系统的图形库所提供的样式和功能是不一样的,在一个平台上存在的功能在另一个平台上则可能不存在。为了实现Java语言所宣称的“一次编写,到处运行(write once, run anywhere)”的概念,AWT不得不通过牺牲功能来实现平台无关性,也即AWT所提供的图形功能是各种操作系统所提供的图形功能的交集。
一、实验内容
完成一个可以完成加、减、乘、除的简易计算器。如图1所示。
图 1 简易计算器结果展示
二、实验思路
创建出想要的窗体以及各种组件(按钮),以及窗口的各种设置,(如大小,初始位置,是否可以拖动等等,注意,所有的设置都要在setVisible(true) 窗体可视化之前
窗体初始化,并写出监听器类对象(内部匿名类),调用事件源组件对象的addXXXlistener方法把监听器注册到事件源上(即计算方法)
三、实验代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//两种创建顶层窗体的方法
//1、JFarame frame=new JFrame("我的窗口")
//2、定义一个类继承自JFrame
public class calculator extends JFrame {
JLabel l_num1,l_op,l_num2,l_result;
JTextField t_num1,t_op,t_num2,t_result;
JButton b_cal,b_reset;
public calculator(String title){
super(title);//设置窗体标题
setSize(300,350);//设置窗体大小
setLocation(300,300);//设置窗体弹出的初始位置
getContentPane();setBackground(new Color(100, 192, 43));
setResizable(false);//不可改变大小
init();
setVisible(true);//设置窗体是否可见
}
public void init(){
l_num1 = new JLabel("操作数1",JLabel.CENTER);
l_op = new JLabel("操作符:",JLabel.CENTER);
l_num2 = new JLabel("操作数2",JLabel.CENTER);
l_result = new JLabel("计算结果:",JLabel.CENTER);
t_num1 = new JTextField();
t_op = new JTextField();
t_num2 = new JTextField();
t_result = new JTextField();
b_cal = new JButton("计算");//事件源
MyListener listener=new MyListener();//创建监听器类对象
b_cal.addActionListener(listener);//调用事件源组件对象的addXXXlistener方法把监听器注册到事件源上
b_reset = new JButton("重置");//事件源
b_reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
reset();
}
});//匿名内部类,监听器三合一
setLayout(new GridLayout(5,2));
add(l_num1);add(t_num1);
add(l_op);add(t_op);
add(l_num2);add(t_num2);
add(l_result);add(t_result);
add(b_cal);add(b_reset);
}
//监听器的使用步骤
//1、自定义一个类,让他实现XXXListener这个接口
//2、创建事件监听器类对象(第一步中自定义的类)
//3、调用事件源组件对象的addXXXlistener方法吧监听器注册到事件源上
public class MyListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
// TODO Auto-generated method stud
cal();
}
}
//完成计算功能
public void cal(){
try{
if(t_num1.getText().equals("")||t_op.getText().equals("")||t_num2.getText().equals("")){
JOptionPane.showMessageDialog(null,"操作数或运算符不能为空","操作数或运算符为空",JOptionPane.WARNING_MESSAGE);
}
double num1 = Double.parseDouble(t_num1.getText());
char op = t_op.getText().charAt(0);
double num2 = Double.parseDouble(t_num2.getText());
switch(op){
case '+':t_result.setText(num1+num2+"");break;
case '-':t_result.setText(num1-num2+"");break;
case '*':t_result.setText(num1*num2+"");break;
case '/':t_result.setText(num1/num2+"");break;
default:JOptionPane.showMessageDialog(null,"非法的运算符");
}
} catch(NumberFormatException e){
JOptionPane.showMessageDialog(null,"操作数非法");
}
}
//完成重置功能
public void reset(){
t_num1.setText("");
t_op.setText("");
t_num2.setText("");
t_result.setText("");
}
}
//测试类
public class TestCalculator {
public static void main(String[] args){
calculator ca = new calculator("计算器");
}
}
四、实验结果截图
以上
总结
这就是对计算器窗体化的全部内容了,不得不说窗体作为一个可视化的做起来还是非常有趣味性和成就感的。