一、实验目的
本实验的目的是掌握JAVA容器类JFrame和JPanel的使用;掌握Swing常用布局的使用;掌握常用可视组件的使用。
二、实验内容
完成一个简单的计算器的功能。实现的效果图如下所示:
计算器 实现的计算功能为:加、减、乘、除法、求余;“C”为清除,“<-“为退格等功能。
三、实验步骤
- 声明一个文本栏控件,用于显示计算结果
- 定义一个字符串数组,将计算器中按钮的文字都放在该数组中
- 声明一个按钮数组
- 使用BorderLayout.NORTH将文本栏控件放置在窗体框架的北部
- 使用GridLayout(5,4)设置一个网格布局并将该网格布局放到一个 JPanel面板上
- 分别实例化按钮监听对象和键盘监听对象
- 注册监听
- 设置窗口属性
- 写实现加减乘除取余计算的函数 写点击按钮监听类和键盘监听类(分别监听数字,运算符,退格和清 除)
四、实验结果
五、实验小结
本次实验我学会了JAVA容器类JFrame和JPanel的使用,还有键盘监听和按钮监听的使用。在设计计算器时,要把数字按钮(键盘),运算符按钮(键盘),清除按钮和退格按钮分开判断。在进行清除设计时,不能简单的把文本框设为空,而应该在将文本框设为空的同时,将其他值也设为初始值;在进行退格设计时,也不能简单的把文本框中的字符串长度减一,而是要进行判断,在退格之前的按钮类型是数字还是运算符。通过这次实验,我明白了,做一个程序需要有严谨的逻辑思维能力!
六、源代码
package 菜鸟教程.JavaSwing介绍; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Calculator extends JFrame { // 声明一个文本栏控件,用于显示计算结果 private JTextField txtResult; private JPanel p; // 定义一个字符串数组,将计算器中按钮的文字都放在该数组中 private String name[] = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2","3", "*", "0", ".", "=", "/", "<-", "C", "%", " "}; // 声明一个按钮数组,该数组的长度以字符串数组的长度为准 private JButton button[] = new JButton[name.length]; // 定义一个存放计算结果的变量,初始为0 private double result = 0; // 存放最后一个操作符,初始为“=” private String lastCommand = "="; // 标识是否是开始 private boolean start = true; String input; char key; public Calculator() { super("计算器"); // 实例化文本栏控件 txtResult = new JTextField(20); // 设置文本框不是焦点状态 txtResult.setFocusable(false); // 将文本栏控件放置在窗体框架的上方(北部) this.add(txtResult, BorderLayout.NORTH); // 实例化面板对象,同时设置此面板布局为5行4列的网格布局 p = new JPanel(new GridLayout(5, 4)); // 循环实例化按钮对象数组 // 实例化按钮监听对象 ButtonAction ba = new ButtonAction(); // 实例化键盘监听对象 KeyAction ka = new KeyAction(); for (int i = 0; i < button.length; i++) { button[i] = new JButton(name[i]); // 注册监听 button[i].addActionListener(ba); button[i].addKeyListener(ka); p.add(button[i]); } this.add(p, BorderLayout.CENTER); // 设定窗口大小 this.setSize(300, 300); // 设定窗口左上角坐标 this.setLocation(200, 100); // 设定窗口默认关闭方式为退出应用程序 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口可视(显示) this.setVisible(true); } // 计算 public void calculate(double x) { if (lastCommand.equals("+")) result += x; else if (lastCommand.equals("-")) result -= x; else if (lastCommand.equals("*")) result *= x; else if (lastCommand.equals("/")) result /= x; else if (lastCommand.equals("=")) result = x; else if (lastCommand.equals("%")) result %= x; //else if (lastCommand.equals("C")) // result = 0; // 将结果显示在文本栏 txtResult.setText("" + result); } // 点击按钮监听 private class ButtonAction implements ActionListener { public void actionPerformed(ActionEvent e) { String input1=input; input = e.getActionCommand(); // 点击操作符号按钮 if (input.equals("+") || input.equals("-") || input.equals("*") || input.equals("/") || input.equals("=") || input.equals("%")) { if (start) { if (input.equals("-")) { txtResult.setText(input); start = false; } else lastCommand = input; } else { calculate(Double.parseDouble(txtResult.getText())); lastCommand = input; start = true; } } else if(input.equals("C")) { result = 0; lastCommand = "="; start = true; txtResult.setText(" "); }else if(input.equals("<-")) { if(input1.equals("+")|| input1.equals("-") || input1.equals("*") || input1.equals("/")|| input1.equals("%") ){ result=Double.parseDouble(txtResult.getText()); input1="="; lastCommand = "="; }else { String a; a=txtResult.getText(); a = a.substring(0, a.length()-1); txtResult.setText(a); } } else { if (start) { txtResult.setText(""); start = false; } txtResult.setText(txtResult.getText() + input); } } } // 键盘监听 private class KeyAction extends KeyAdapter { public void keyTyped(KeyEvent e) { char key1=key; key = e.getKeyChar(); // 敲击的键盘是数字 if (key == '0' || key == '1' || key == '2' || key == '3' || key == '4' || key == '5' || key == '6' || key == '7' || key == '8' || key == '9' || key == '9') { if (start) { txtResult.setText(""); start = false; } txtResult.setText(txtResult.getText() + key); } // 敲击的键盘是操作符号 else if (key == '+' || key == '-' || key == '*' || key == '/' || key == '='|| key =='%') { if (start) { if (key == '-') { txtResult.setText(String.valueOf(key)); start = false; } else lastCommand = String.valueOf(key); } else { calculate(Double.parseDouble(txtResult.getText())); lastCommand = String.valueOf(key); start = true; } }else if(key == 'c' || key == 'C') { result = 0; lastCommand = "="; start = true; txtResult.setText(" "); }else if(key == 46) { if(key1 == '+' || key1 == '-' || key1 == '*' || key1 == '/'|| key1 =='%' ){ //result=0; key1='='; lastCommand = "="; }else { String a; a=txtResult.getText(); a = a.substring(0, a.length()-1); txtResult.setText(a); } } } } public static void main(String[] args) { new Calculator(); } }
标签:awt,java,Swing,---,UI,按钮,import,监听,计算器 From: https://www.cnblogs.com/szmtjs10/p/17815098.html