一、目的:制作如图一个简单的计算器,点击 确认按钮 2 输出结果然后 1 框清空内容
二、思路:
一、实现面板样式
1.GirdLayout(2,1),上面填充north
2.north 使用网格布局 GridLayout (1,5)分为north1,north2…north5。south1,south3,south5为文本框TextField,south2,south4 为标签.
south 使用 网格布局 GridLayout(1,3) 分为south1,south,2,south3,
south1,south3 为空面板,south2 为按钮
package GUI.简单计算器;
import GUI.MyClass.MySystemExit;
import java.awt.*;
public class Demo {
public static void main(String[] args) {
new CalculatorFrame();
}
}
class CalculatorFrame extends Frame {
CalculatorFrame(){
this.setName("简单计算器窗口");
this.setLayout(new GridLayout(2,1,20,20));
//一、
Panel north = new Panel();
Panel south = new Panel();
this.add(north,new GridLayout(1,1));
this.add(south,new GridLayout(2,1));
north.setBackground(new Color(99, 255, 240));
//二、
north.setLayout(new GridLayout(1,5,5,5));
TextField north1 = new TextField();
Label north2 = new Label(" + ");
TextField north3 = new TextField();
Label north4 = new Label(" = ");
TextField north5 = new TextField();
north.add(north1,new GridLayout(1,1));
north.add(north2,new GridLayout(1,2));
north.add(north3,new GridLayout(1,3));
north.add(north4,new GridLayout(1,4));
north.add(north5,new GridLayout(1,5));
south.setLayout(new GridLayout(1,3,5,5));
Panel south1 = new Panel();
Button south2 = new Button("confrim");
Panel south3 = new Panel();
south.add(south1,new GridLayout(1,1));
south.add(south2,new GridLayout(1,2));
south.add(south3,new GridLayout(1,3));
//location size color
this.setLocation(100,100);
this.setSize(400,400);
this.setVisible(true);
new MySystemExit(this);
}
}
样式
二、实现功能
1.给button添加监听,监听### 一、目的:制作如图一个简单的计算器,点击 确认按钮 2 输出结果然后 1 框清空内容
### 二、思路:###### 一、实现面板样式1.GirdLayout(2,1),上面填充north2.north 使用网格布局 GridLayout (1,5)分为north1,north2…north5。south1,south3,south5为文本框TextField,south2,south4 为标签.south 使用 网格布局 GridLayout(1,3) 分为south1,south,2,south3,south1,south3 为空面板,south2 为按钮javapackage GUI.简单计算器;import GUI.MyClass.MySystemExit;import java.awt.*;public class Demo { public static void main(String[] args) { new CalculatorFrame(); }}class CalculatorFrame extends Frame { CalculatorFrame(){ this.setName("简单计算器窗口"); this.setLayout(new GridLayout(2,1,20,20)); //一、 Panel north = new Panel(); Panel south = new Panel(); this.add(north,new GridLayout(1,1)); this.add(south,new GridLayout(2,1)); north.setBackground(new Color(99, 255, 240)); //二、 north.setLayout(new GridLayout(1,5,5,5)); TextField north1 = new TextField(); Label north2 = new Label(" + "); TextField north3 = new TextField(); Label north4 = new Label(" = "); TextField north5 = new TextField(); north.add(north1,new GridLayout(1,1)); north.add(north2,new GridLayout(1,2)); north.add(north3,new GridLayout(1,3)); north.add(north4,new GridLayout(1,4)); north.add(north5,new GridLayout(1,5)); south.setLayout(new GridLayout(1,3,5,5)); Panel south1 = new Panel(); Button south2 = new Button("confrim"); Panel south3 = new Panel(); south.add(south1,new GridLayout(1,1)); south.add(south2,new GridLayout(1,2)); south.add(south3,new GridLayout(1,3)); //location size color this.setLocation(100,100); this.setSize(400,400); this.setVisible(true); new MySystemExit(this); }}
### 样式
二、实现功能
1.给button添加监听,监听类implements 实现接口 ActionListener.
2.监听类的Override函数,因该包括以下功能
2.1:获取 3个TextField 变量,使用构造器将 对象参数传进来。
2.2 :获取 x ,y ,中的值,并赋值z = x + y(使用一些语句提取值和赋值)
2.3:清空 x,y 的值。
2.4 :事件监听添加到 button中.
class MyCalculatorActionListener implements ActionListener {
TextField x,y,z;
MyCalculatorActionListener(TextField x,TextField y,TextField z){
this.x = x;
this.y = y;
this.z = z;
}
@Override
public void actionPerformed(ActionEvent e) {
z.setText(Double.valueOf(x.getText())+Double.valueOf(y.getText())+"");
x.setText("");
y.setText("");
}
}
总代码
package GUI.简单计算器;
import GUI.MyClass.MySystemExit;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Demo {
public static void main(String[] args) {
new CalculatorFrame();
}
}
class CalculatorFrame extends Frame {
CalculatorFrame() {
this.setName("简单计算器窗口");
this.setLayout(new GridLayout(2, 1, 20, 20));
//实现样式一、
Panel north = new Panel();
Panel south = new Panel();
this.add(north, new GridLayout(1, 1));
this.add(south, new GridLayout(2, 1));
north.setBackground(new Color(99, 255, 240));
//实现样式二、
north.setLayout(new GridLayout(1, 5, 5, 5));
TextField north1 = new TextField();
Label north2 = new Label(" + ");
TextField north3 = new TextField();
Label north4 = new Label(" = ");
TextField north5 = new TextField();
north.add(north1, new GridLayout(1, 1));
north.add(north2, new GridLayout(1, 2));
north.add(north3, new GridLayout(1, 3));
north.add(north4, new GridLayout(1, 4));
north.add(north5, new GridLayout(1, 5));
south.setLayout(new GridLayout(1, 3, 5, 5));
Panel south1 = new Panel();
Button south2 = new Button("confrim");
Panel south3 = new Panel();
south.add(south1, new GridLayout(1, 1));
south.add(south2, new GridLayout(1, 2));
south.add(south3, new GridLayout(1, 3));
//实现功能
south2.addActionListener(new MyCalculatorActionListener(north1, north3, north5));
//location size color
this.setLocation(100, 100);
this.setSize(400, 400);
this.setVisible(true);
new MySystemExit(this);
}
}
class MyCalculatorActionListener implements ActionListener {
TextField x, y, z;
MyCalculatorActionListener(TextFielxd x, TextField y, TextField z) {
this.x = x;
this.y = y;
this.z = z;
}
@Override
public void actionPerformed(ActionEvent e) {
z.setText(Double.valueOf(x.getText()) + Double.valueOf(y.getText()) + "");
x.setText("");
y.setText("");
}
}
效果演示:
三、使用类的组合实现计算器
在Java的面向对象OPP 思想中,组合的优先级大于继承
什么是组合?
1.继承
class A extends B{
}
组合
calss A {
B b = null;
};
1.思路
1.完成一个一中的框架,不实现功能,但是把类的属性和方法分离
2.在自制的ActionLinstener 中创建class 类组合实现法计算器的对象 frameObj,通过构造函数传入参数给farmeObj赋值,
3.利用frameObj 获取 north1,north3 的值并转化后相加 在赋给 north5。最后north1 north3 重置。
2.代码
package GUI.简单计算器;
import GUI.MyClass.MySystemExit;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class 类组合实现法计算器 extends Frame {
Panel north;
Panel south;
//二、north
TextField north1;
Label north2;
TextField north3;
Label north4;
TextField north5;
//south
Panel south1;
Button south2;
Panel south3;
void loadFrame() {
this.setName("简单计算器窗口");
this.setLayout(new GridLayout(2, 1, 20, 20));
//实现样式一、
north = new Panel();
south = new Panel();
this.add(north, new GridLayout(1, 1));
this.add(south, new GridLayout(2, 1));
north.setBackground(new Color(255, 255, 255));
//实现样式二、
north.setLayout(new GridLayout(1, 5, 5, 5));
north1 = new TextField();
north2 = new Label(" + ");
north3 = new TextField();
north4 = new Label(" = ");
north5 = new TextField();
north.add(north1, new GridLayout(1, 1));
north.add(north2, new GridLayout(1, 2));
north.add(north3, new GridLayout(1, 3));
north.add(north4, new GridLayout(1, 4));
north.add(north5, new GridLayout(1, 5));
south.setLayout(new GridLayout(1, 3, 5, 5));
south1 = new Panel();
south2 = new Button("confrim");
south3 = new Panel();
south.add(south1, new GridLayout(1, 1));
south.add(south2, new GridLayout(1, 2));
south.add(south3, new GridLayout(1, 3));
//实现功能
south2.addActionListener(new My类组合实现法计算器ActionListener(this));
//location size color
this.setLocation(100, 100);
this.setSize(400, 100);
this.setVisible(true);
new MySystemExit(this);
}
public static void main(String[] args) {
new 类组合实现法计算器().loadFrame();
}
}
class My类组合实现法计算器ActionListener implements ActionListener {
//获取窗体对象
类组合实现法计算器 frameObj = null;
My类组合实现法计算器ActionListener(类组合实现法计算器 frameObj) {
this.frameObj = frameObj;
}
@Override
public void actionPerformed(ActionEvent e) {
frameObj.north5.setText(Double.valueOf(frameObj.north1.getText()) +
Double.valueOf(frameObj.north3.getText()) + "");
frameObj.north1.setText("");
frameObj.north3.setText("");
}
}