GUI-TextField 和编制简易计算器(AWT)

1、监听事件

当某个事情发生了什么,干了什么?我们需要去监听

package com.GUI.lession2;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestActionEven {
    public static void main(String[] args) {
        Frame frame = new Frame("第一个Frame");
        //按下按钮触发一些事情
        Button button = new Button();
        //因为addActionListener 需要一个ActionListener,所以我们需要构造一个ActionListener
        MywindowLession mywindowLession = new MywindowLession();
        //添加监听器
        button.addActionListener(mywindowLession);
        frame.add(button,BorderLayout.CENTER);
        Mywindowcloseing(frame);
        frame.pack();
        frame.setVisible(true);
    }
    //关闭窗口
    private static void Mywindowcloseing(Frame frame){
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
//监听事件
class MywindowLession implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("点一下");
    }
}

2、两个按钮,实现听一个监听, 开始,停止

package com.GUI.lession2;

import com.oop.Demo05.B;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestAction2 {
    public static void main(String[] args) {
        //两个按钮,实现同一个监听,开始   停止
        Frame frame = new Frame("一个Frame");
        Button start = new Button("start");
        Button ending = new Button("ending");
        //可以显示定义触发会返回的值,如果不定义,则走默认的值
        //可以多写几个按钮监听,只写一个监听类。
        start.setActionCommand("button-1");
        MyActionLession myActionLession = new MyActionLession();

        start.addActionListener(myActionLession);
        ending.addActionListener(myActionLession);

        frame.add(start,BorderLayout.NORTH);
        frame.add(ending, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }
}

class MyActionLession implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("MyAction-->" + e.getActionCommand());
    }
}

多个按钮实现一个监听

3、输入框:textField监听

package com.GUI.lession2;



import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class MyFrame1 extends Frame{
    public MyFrame1(){
        TextField textField = new TextField();
        add(textField);
        //监听这个文本框输入的文字
        Myactionlession2 myactionlession2 = new Myactionlession2();
        //按下enter键,就可以获得文本框的事件
        textField.addActionListener(myactionlession2);
        //设置替换编码
        textField.setEchoChar('*');
        setVisible(true);
        pack();
    }
}
class Myactionlession2 implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        TextField field = (TextField) e.getSource();  //获得一些资源,返回一个对象
        System.out.println(field.getText());  //获得输入框的文本
        field.setText("");  //设置为空
    }
}

3、1简易计算器: 组合+内部类回顾复习

  • oop原则:组合 大于继承
class A extends B {}   //继承
class A{
	public B b;    //组合
}
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//计算
public class TestCala {
    public static void main(String[] args) {
        new Calculor();
    }
}
//计算机类
class Calculor extends Frame {
    public Calculor(){
        //3个文本框
        TextField textField1 = new TextField(10);//字符数
        TextField textField2 = new TextField(10);//字符数
        TextField textField3 = new TextField(10);//字符数

        //一个按钮框
        Button button = new Button("=");
        button.addActionListener(new CalculorListen(textField1,textField2,textField3));
        //一个标签框
        Label label = new Label("+");
        //流式布局
        setLayout(new FlowLayout());
        add(textField1);
        add(label);
        add(textField2);
        add(button);
        add(textField3);
        pack();
        setVisible(true);
    }
}
class CalculorListen implements ActionListener{
    private TextField num1,num2,num3;

    public CalculorListen(TextField num1, TextField num2, TextField num3) {
        this.num1 = num1;
        this.num2 = num2;
        this.num3 = num3;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //获取加数和被加数
        int i1 = Integer.parseInt(num1.getText());
        int i2 = Integer.parseInt(num2.getText());
        //将两个数的和放到第三个框
        num3.setText("" + (i1+i2));
        //再将第一、二两个框设为空
        num1.setText("");
        num2.setText("");
    }
}

完全改造为面向对象

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//计算
public class TestCala {
    public static void main(String[] args) {
        new Calculor();
    }
}
//计算机类
class Calculor extends Frame {
    //属性
    TextField textField1, textField2,textField3;
    //方法
    public void loadFrame(){
        //3个文本框
        TextField textField1 = new TextField(10);//字符数
        TextField textField2 = new TextField(10);//字符数
        TextField textField3 = new TextField(10);//字符数

        //一个按钮框
        Button button = new Button("=");
        button.addActionListener(new CalculorListen(this));
        //一个标签框
        Label label = new Label("+");
        //流式布局
        setLayout(new FlowLayout());
        add(textField1);
        add(label);
        add(textField2);
        add(button);
        add(textField3);
        pack();
        setVisible(true);
    }
}
class CalculorListen implements ActionListener{
    private Calculor calculor = null;

    public CalculorListen(Calculor calculor) {
       this.calculor = calculor;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //获取加数和被加数
        int i1 = Integer.parseInt(calculor.textField1.getText());
        int i2 = Integer.parseInt(calculor.textField2.getText());
        //将两个数的和放到第三个框
        calculor.textField3.setText("" + (i1+i2));
        //再将第一、二两个框设为空
        calculor.textField1.setText("");
        calculor.textField2.setText("");
    }
}

用内部类优化

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//计算
public class TestCala {
    public static void main(String[] args) {
        new Calculor().loadFrame();
    }
}
//计算机类
class Calculor extends Frame {
    //属性
    private TextField textField1, textField2,textField3;
    //方法
    public void loadFrame(){
        //3个文本框
        TextField textField1 = new TextField(10);//字符数
        TextField textField2 = new TextField(10);//字符数
        TextField textField3 = new TextField(10);//字符数

        //一个按钮框
        Button button = new Button("=");
        button.addActionListener(new CalculorListen());
        //一个标签框
        Label label = new Label("+");
        //流式布局
        setLayout(new FlowLayout());
        add(textField1);
        add(label);
        add(textField2);
        add(button);
        add(textField3);
        pack();
        setVisible(true);
    }
    private  class CalculorListen implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            //获取加数和被加数
            int i1 = Integer.parseInt(textField1.getText());
            int i2 = Integer.parseInt(textField2.getText());
            //将两个数的和放到第三个框
            textField3.setText("" + (i1+i2));
            //再将第一、二两个框设为空
            textField1.setText("");
            textField2.setText("");
        }
    }
}
  • 内部类好处是窜通无阻的访问外部内
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值