一、实验目的
【目的要求】
了解AWT及Swing包中各组件的使用
掌握GUI基本组件的使用及事件处理机制
【注意事项】
注意电源插座的用电安全;
遵守计算机的使用注意事项;
防范病毒。
【使用工具】
电脑
window系统
JDK环境
eclipse开发环境
三、实验内容:(编写程序调试输出结果)
(删除此行,同学们以下填写实验步骤,程序框图/代码/运行结果截图等)
【相关知识】
1.简易计算器,要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。
用户可以通过button输入表达式,进行计算。
package Example1;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame{
//定义JTextField 文本框,输入显示的字符串
String string = new String();
//构造Calculator函数
public Calculator(){
// 创建一个 Container 容器
Container container=getContentPane();
//设置容器标题
setTitle(" 简单计算器 ");
//设窗体的大小 ,位置
setSize(400,250);
setLocation(300,200);
//设置容器布局:网格布局样式,5行1列,水平间距50,垂直间距10
container.setLayout(new GridLayout(5,1,50,10));
// 创建JTextField, 显示操作和计算结果的文本框。
JTextField field = new JTextField(26);
//把字符串赋值给文本框
field.setText(string);
//创建清除键
JButton clear_Button = new JButton(" clear ");
//给按钮添加事件监听器
clear_Button.addActionListener(clearButtonListener(field));
JButton button0 = new JButton("0");
button0.addActionListener(numbersAndOperatorsListener(field));
JButton button1 = new JButton("1");
button1.addActionListener(numbersAndOperatorsListener(field));
JButton button2 = new JButton("2");
button2.addActionListener(numbersAndOperatorsListener(field));
JButton button3 = new JButton("3");
button3.addActionListener(numbersAndOperatorsListener(field));
JButton button4 = new JButton("4");
button4.addActionListener(numbersAndOperatorsListener(field));
JButton button5 = new JButton("5");
button5.addActionListener(numbersAndOperatorsListener(field));
JButton button6 = new JButton("6");
button6.addActionListener(numbersAndOperatorsListener(field));
JButton button7 = new JButton("7");
button7.addActionListener(numbersAndOperatorsListener(field));
JButton button8 = new JButton("8");
button8.addActionListener(numbersAndOperatorsListener(field));
JButton button9 = new JButton("9");
button9.addActionListener(numbersAndOperatorsListener(field));
//计算命令按钮 加减乘除以及小数点等
//小数点
JButton button_spot = new JButton(".");
button_spot.addActionListener(numbersAndOperatorsListener(field));
//加
JButton button_add = new JButton("+");
button_add.addActionListener(numbersAndOperatorsListener(field));
//减
JButton button_subtract = new JButton("-");
button_subtract.addActionListener(numbersAndOperatorsListener(field));
//乘
JButton button_multiply = new JButton("*");
button_multiply.addActionListener(numbersAndOperatorsListener(field));
//除
JButton button_divide = new JButton("/");
button_divide.addActionListener(numbersAndOperatorsListener(field));
//等于
JButton button_equal = new JButton("=");
button_equal.addActionListener(equalButtonListener(field));
//创建JPanel面板组件并且采用 BorderLayout布局格式
JPanel panel = new JPanel(new BorderLayout());
//在面板中添加文本框组件
panel.add(field,BorderLayout.WEST);
//在面板中添加文本框组件
panel.add(clear_Button, BorderLayout.EAST);
JPanel pan1 = new JPanel(new GridLayout(1,4,5,5));
pan1.add(button7);
pan1.add(button8);
pan1.add(button9);
pan1.add(button_divide);
JPanel pan2 = new JPanel(new GridLayout(1,4,5,5));
pan2.add(button4);
pan2.add(button5);
pan2.add(button6);
pan2.add(button_multiply);
JPanel pan3 = new JPanel(new GridLayout(1,4,5,5));
pan3.add(button1);
pan3.add(button2);
pan3.add(button3);
pan3.add(button_subtract);
JPanel pan4 = new JPanel(new GridLayout(1,4,5,5));
pan4.add(button0);
pan4.add(button_spot);
pan4.add(button_equal);
pan4.add(button_add);
//在容器上添加面板控件
container.add(panel);
container.add(pan1);
container.add(pan2);
container.add(pan3);
container.add(pan4);
//设定窗体的可视化
setVisible(true);
//设置窗体的关闭方式
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
//数字和运算符监听事件
public ActionListener numbersAndOperatorsListener(JTextField result_TextField ){
return new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
JButton jButton = (JButton) e.getSource();
System.out.println("获取事件监听器:"+jButton.getText());
string += jButton.getText();
result_TextField.setText(string);
}
};
}
//使用JDK自带的类可以实现执行字符串中的运算公式的功能
static ScriptEngine javaScriptEngine = new ScriptEngineManager().getEngineByName("JavaScript");
//等于运算
public ActionListener equalButtonListener(JTextField result_TextField){
return new ActionListener() {
String str =null;
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("result_TextField -->"+ result_TextField.getText());
str = result_TextField.getText();
string = equal(str);
result_TextField.setText(string);
}
public String equal(String str){
String result ="";
try {
System.out.println(javaScriptEngine.eval(str));
result = javaScriptEngine.eval(str).toString();
} catch (Exception t) {
}
return result;
}
};
}
//清除文本框的内容
public ActionListener clearButtonListener(JTextField result_TextField){
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
string = "";
result_TextField.setText(string);
}
};
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
}
}
【实验思考】
Java编写GUI代码通常有哪几种布局方式?
3种
- BorderLayout:东西南北中布局,将窗口分为东西南北中四个“块儿”,也可以称作上下左右中5个布局,也是默认布局管理器
- GridLayout布局管理器:网格排布