注意
完整实验报告及源码:https://download.csdn.net/download/qq_29711355/85640627
一、实验目的:
练习面向对象的图形用户界面设计、界面布局、事件设计方
法。
二、实验内容:
设计一个类似Windows计算器的Application应用程序。
三、实验要求:
1、采用Java Application方式建立应用程序框架;
2、仿照Windows计算器,利用多种布局方式实现界面设计;
3、完成简单的整数加、减、乘、除运算。
四、实验报告内容要求:
1、简要分析Java Application方式建立的应用程序框架的
执行过程;
2、简要分析Windows计算器的布局拆分思路;
3、完整介绍整数加、减、乘、除运算的实现思想和具体设
计实现过程。
4、简要说明你在该实验中的收获与体会。
参考代码
Calculator 类
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FocusTraversalPolicy;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;
import java.util.function.DoublePredicate;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class Calculator extends JFrame{
public Calculator() {
this.init();
this.loadNorth();
this.loadCenter();
}
private void init() {
setLayout(new BorderLayout());
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setSize(new Dimension(300,400));
this.add(jPanelNorth,BorderLayout.NORTH);
this.add(jPanelCenter,BorderLayout.CENTER);
}
//设置北面的JTextFiled
private JPanel jPanelNorth = new JPanel();
private JTextField jTextField = new JTextField();
private JButton btn_clear = new JButton("C");
MyActionListener myActionListener = new MyActionListener();
private void loadNorth() {
jTextField.setPreferredSize(new Dimension(220,40));
jPanelNorth.add(jTextField);
jPanelNorth.add(btn_clear);
btn_clear.addActionListener(myActionListener);
}
//除清除键以外的按键部分
private JPanel jPanelCenter = new JPanel();
private void loadCenter() {
jPanelCenter.setLayout(new GridLayout(4,4));
String btn_text = "789/456*123-0.=+";
for (int i = 0; i < 16; i++) {
String temp = btn_text.substring(i, i+1);
JButton btn_center = new JButton(temp);
jPanelCenter.add(btn_center);
btn_center.addActionListener(myActionListener);
}
}
//按键监听类
public class MyActionListener implements ActionListener{
private Double a = null;
private String symbol = null;
private boolean whether = false;
@Override
public void actionPerformed(ActionEvent e) {
String click = e.getActionCommand();
if (whether) {
jTextField.setText("");
whether = false;
}
if (".0123456789".indexOf(click) != -1) {
jTextField.setText(jTextField.getText() + click);
}else if ("//+//-*/".indexOf(click) != -1) {
a = Double.parseDouble(jTextField.getText());
symbol = click;
jTextField.setText("");
}else if (click.equals("=")) {
if (symbol.equals("/") && jTextField.getText().equals("") || Double.parseDouble(jTextField.getText()) == 0.0) {
JOptionPane.showMessageDialog(null, "0不能作为除数","注意",JOptionPane.ERROR_MESSAGE);
}else if (symbol != null) {
switch (symbol) {
case "+":
a += Double.parseDouble(jTextField.getText());
break;
case "-":
a -= Double.parseDouble(jTextField.getText());
break;
case "*":
a *= Double.parseDouble(jTextField.getText());
break;
case "/":
a /= Double.parseDouble(jTextField.getText());
break;
default:
break;
}
}
jTextField.setText(a.toString());
whether = true;
}else if (click.equals("C")) {
a = null;
jTextField.setText("");
}
System.out.println("点击了:" + click + " " +a);
}
}
}
Test 类
public class Test {
public static void main(String[] args) {
new Calculator();
}
}