暑期GUI学习

事件监听

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 jianting {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.pack();

        Button button1 = new Button("start");
        Button button2 = new Button("end");

        //设置按钮信息,如果不设置,默认返回按钮名
        button1.setActionCommand("123");
        button2.setActionCommand("456");
        frame.setLayout(new GridLayout(1,2));
        frame.add(button1);
        frame.add(button2);
        Myaction myaction = new Myaction();
        button1.addActionListener(myaction);
        button2.addActionListener(myaction);

        frame.setVisible(true);
        frame.setBounds(10,10,200,200);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(0);
            }
        });
    }

}
//事件监听
class Myaction implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("按钮被点击了:msg"+e.getActionCommand());
        //获取按钮信息
        if (e.getActionCommand().equals("123"))
        {
            System.out.println("halilu");
        }
        else {
            System.out.println("haliluya");
        }

    }
}

输入框事件监听

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 Textfield {
    public static void main(String[] args) {
        //启动
        MyFrame myFrame = new MyFrame();
    }
}
    class MyFrame extends Frame{
        public MyFrame()
        {
            TextField textField = new TextField();
            add(textField);
            //监听这个文本框输入的文字
            MyactionListener myactionListener = new MyactionListener();
            textField.addActionListener(myactionListener);
            pack();
            setVisible(true);
            textField.setEchoChar('*');
            setSize(200,200);
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    super.windowClosing(e);
                    System.exit(0);
                }
            });
        }
    }
    
    
    class MyactionListener implements ActionListener{//回车触发

        @Override
        public void actionPerformed(ActionEvent e) {
            TextField field=(TextField) e.getSource();//获取文本框输入资源
            System.out.println(field.getText());//输出获得的文本资源
            field.setText("");//null   清空文本输入
            //e.getSource();//获得一些资源
        }
    }

简易计算器的开发制作

oop原则:组合大于继承

什么是oop(面向对象编程):
在这里插入图片描述
在这里插入图片描述

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 Calculator {
    public static void main(String[] args) {
        new Calcula();


    }
}

//计算器类
class Calcula extends Frame
{
    public Calcula()//构造函数
    {
        //3个文本框
        TextField field1 = new TextField(10);//字符数
        TextField field2 = new TextField(10);
        TextField field3 = new TextField(20);
        //按钮
        Button button = new Button("=");
        button.addActionListener(new MyCalcular(field1,field2,field3));

        //标签   文字性描述
        Label label = new Label("+");
        //布局 流式布局
        setLayout(new FlowLayout());
        add(field1);
        add(label);
        add(field2);
        add(button);
        add(field3);
        pack();
        setVisible(true);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

    }

}

//监听器类
class MyCalcular implements ActionListener{
    private TextField field1,field2,field3;
    public MyCalcular(TextField field1,TextField field2,TextField field3)//使用构造函数获取三个变量
    {
        this.field1=field1;
        this.field2=field2;
        this.field3=field3;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //获得加数与被加数
        //field1.getText();//本身是一个String类型,需要转换成Int类型
        int n1=Integer.parseInt(field1.getText());
        int n2=Integer.parseInt(field2.getText());
        //将这个值进行加法运算后,放到第三个文本框
        field3.setText(""+(n1+n2));
        //删除前面两个数
        field1.setText("");
        field2.setText("");
    }
}

优化程序设计:

组合:
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 Calculator {
    public static void main(String[] args) {
        new Calcula().LoadFrame();
    }
}

//计算器类
class Calcula extends Frame
{
    //属性
    TextField field1,field2,field3;
    //方法
    public void LoadFrame()
    {
        //3个文本框
         field1 = new TextField(10);//字符数
         field2 = new TextField(10);
         field3 = new TextField(20);
        //按钮
        Button button = new Button("=");
        button.addActionListener(new MyCalcular(this));
        //标签   文字性描述
        Label label = new Label("+");
        //布局 流式布局
        setLayout(new FlowLayout());
        add(field1);
        add(label);
        add(field2);
        add(button);
        add(field3);
        pack();
        setVisible(true);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

//监听器类
class MyCalcular implements ActionListener{

    //获取计算器这个对象,在一个类中组合另外一个类
    Calcula calcula=null;
    public MyCalcular(Calcula calcula)
    {
        this.calcula=calcula;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //获得加数与被加数
        //field1.getText();//本身是一个String类型,需要转换成Int类型
        int n1=Integer.parseInt(calcula.field1.getText());
        int n2=Integer.parseInt(calcula.field2.getText());
        //将这个值进行加法运算后,放到第三个文本框
        calcula.field3.setText(""+(n1+n2));
        //删除前面两个数
        calcula.field1.setText("");
        calcula.field2.setText("");
    }
}
完全的面向对象(内部类——更好的包装)
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 Calculator {
    public static void main(String[] args) {
        new Calcula().LoadFrame();
    }
}

//计算器类
class Calcula extends Frame
{
    //属性
    TextField field1,field2,field3;
    //方法
    public void LoadFrame()
    {
        //3个文本框
         field1 = new TextField(10);//字符数
         field2 = new TextField(10);
         field3 = new TextField(20);
        //按钮
        Button button = new Button("=");
        button.addActionListener(new MyCalcular());
        //标签   文字性描述
        Label label = new Label("+");
        //布局 流式布局
        setLayout(new FlowLayout());
        add(field1);
        add(label);
        add(field2);
        add(button);
        add(field3);
        pack();
        setVisible(true);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    private class MyCalcular implements ActionListener{    //监听器类(内部类) 最大的好处就是可以最大限度的访问外部类的方法
        @Override
        public void actionPerformed(ActionEvent e) {
            //获得加数与被加数
            //field1.getText();//本身是一个String类型,需要转换成Int类型
            int n1=Integer.parseInt(field1.getText());
            int n2=Integer.parseInt(field2.getText());
            //将这个值进行加法运算后,放到第三个文本框
            field3.setText(""+(n1+n2));
            //删除前面两个数
            field1.setText("");
            field2.setText("");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值