GUI编程学习陆续更新

GUI

组件

- 窗口
- 弹窗
- 面板
- 文本框
- 列表框
- 按钮
- 图片
- 监听事件
- 鼠标

1、简介

GUI 核心 – Swing AWT

为什么要学习:—学习MVC

​ 1、可以写自己想要的小工具

​ 2、可以写逆向

​ 3、了解mvc 了解监听

2、AWT

​ 元素:窗口、按钮、文本框、容器等等

2.1 组件

​ 组件(Component):

​ — button、textarea、lable…

​ 通过add 放到容器中

​ — 容器:Container

​ 窗口:Window

​ 1、Frame,2、Dialog(弹窗)

​ 面板:Panel:

​ Applet

2.2组件和容器

package com.kuang.lesson01;


import java.awt.*;

//GUI 的第一个界面
        public class TestFrame {
            public static void main(String[] args) {

                // 直接点击查看源码,怎么使用该对象
                Frame frame = new Frame("我的第一个Java图像窗口");

                //需要设置可见性,直接通过对象点的方式
                frame.setVisible(true);

                // 设置窗口大、小
                frame.setSize(400,400);

                // 设置背景颜色
                frame.setBackground(new Color(190, 96, 152));

                //窗口弹出的初始位置
                frame.setLocation(700,300);

                //设置大小固定,默认是true
                frame.setResizable(false);        
    }
}

问题:发现窗口关闭不了

多个窗口

package com.kuang.lesson01;

import java.awt.*;

public class Testframe2 {

    public static void main(String[] args) {
        //展示多个窗口直接new 出来
        Myframe myframe1 = new Myframe(100, 100, 200, 200, Color.blue);
        Myframe myframe2 = new Myframe(300, 100, 200, 200, Color.yellow);
        Myframe myframe3 = new Myframe(100, 300, 200, 200, Color.green);
        Myframe myframe4 = new Myframe(300, 300, 200, 200, Color.pink);

    }
}
class Myframe extends Frame{
        static int id = 0;             // 需要一个计数器

        public Myframe(int x,int y,int w,int h,Color color){
            super("Myframe" + (++id));
            setBackground(color);
            setBounds(x,y,w,h);
            setVisible(true);
        }
}

2.3 panel 面板

解决了窗口关闭的问题

package com.kuang.lesson01;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class TestPanel {
    public static void main(String[] args) {
        //panel 是一个空间不能单独存在需要放在frame里面
        Frame frame = new Frame();
        //设置布局
        Panel panel = new Panel();

        //设置布局
        frame.setLayout(null);

        //坐标
        frame.setBounds(300,300,500,500);
        frame.setBackground(new Color(217, 117, 45));

        //panel 设置坐标,相对于frame
        panel.setBounds(50,50,400,400);
        panel.setBackground(new Color(111, 139, 209));

        //frame.add()
        frame.add(panel);

        //设置完成需要显现
        frame.setVisible(true);

        //窗口还是无法关闭,需要解决窗口关闭的问题,需要添加监听事件,监听窗口是否关闭  -- System.exit(0);
        // 监听事件需要重写的方法很多,所有采用适配器设计模式

        frame.addWindowListener(new WindowAdapter() {
            //点击关闭的时候需要做的事情
            @Override
            public void windowClosing(WindowEvent e) {
                //需要做结束程序
                System.exit(0);
            }
        });
    }
}

2.4 设置布局

2.5三种布局方式

  • 流式布局
package com.kuang.lesson01;

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

public class TestFlowLayout {

    public static void main(String[] args) {
        Frame frame = new Frame();

        //组件--按钮
        Button button1 = new Button("button1");
        Button button2 = new Button("button2");

        //设置为流式布局.这里就是流式布局,左右上下
        frame.setLayout(new FlowLayout());
        frame.setLayout(new FlowLayout(FlowLayout.LEFT));

        //设置界面大小
        frame.setSize(200,200);

        //添加按钮
        frame.add(button1);
        frame.add(button2);

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

  • 东西南北中
package com.kuang.lesson01;

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

public class TestBorderLayout {

    public static void main(String[] args) {

        Frame frame = new Frame("TestBorderLayout");

        Button North = new Button("North");
        Button East = new Button("East");
        Button West = new Button("West");
        Button South = new Button("South");
        Button Center = new Button("Center");

        //添加按钮
        frame.add(North,BorderLayout.NORTH);
        frame.add(East,BorderLayout.EAST);
        frame.add(West,BorderLayout.WEST);
        frame.add(South,BorderLayout.SOUTH);
        frame.add(Center,BorderLayout.CENTER);

        frame.setSize(200,200);
        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

  • 表格布局(三行两列)
package com.kuang.lesson01;

import java.awt.*;

public class TestGridLayout {

    public static void main(String[] args) {

        Frame frame = new Frame("TestGridLayout");

        Button button1 = new Button("button1");
        Button button2 = new Button("button2");
        Button button3 = new Button("button3");
        Button button4 = new Button("button4");
        Button button5 = new Button("button5");
        Button button6 = new Button("button6");

        frame.setLayout(new GridLayout(3,2));

        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.add(button4);
        frame.add(button5);
        frame.add(button6);

        frame.pack();         //java 函数。自动布局
        frame.setVisible(true);

    }
}

作业:利用现在所学习的知识:画一个下面的图形界面的按钮:

分析:

​ frame :面框 panel :画板

  • 第一种:把它看成4个面板,大面板套小面板这样去做就需要用4个面板,套在一个frame 里面
package com.kuang.lesson01;

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

public class Work2 {

    public static void main(String[] args) {

        // 第一步先画一个框
        Frame frame = new Frame("work");

        frame.setSize(400,300);
        frame.setLocation(300,400);
        frame.setBackground(new Color(210, 86, 110));
        frame.setVisible(true);
        frame.setLayout(new GridLayout(2,1));

        //画出4个面板
        Panel p1 = new Panel(new BorderLayout());
        Panel p2 = new Panel(new GridLayout(2, 1));
        Panel p3 = new Panel(new BorderLayout());
        Panel p4 = new Panel(new GridLayout(2,2));

        //上半部
        p1.add(new Button("East-1"),BorderLayout.EAST);
        p1.add(new Button("West-1"),BorderLayout.WEST);
        p2.add(new Button("p2-btn-1"));
        p2.add(new Button("p2-btn-2"));
        p1.add(p2,BorderLayout.CENTER);

        //下半部
        p3.add(new Button("East-2"),BorderLayout.EAST);
        p3.add(new Button("West-2"),BorderLayout.WEST);

        for (int i = 0; i < 4; i++) {
            p4.add(new Button("for" +  i));
        }
        p3.add(p4,BorderLayout.CENTER);

        frame.add(p1);
        frame.add(p3);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

  • 第二种:先把它看成表格布局两行一列,然后就是两个按钮 + 1一个面板,上下都是这个布局,唯一不同的就是更改这个中间面板的布局,中间面板的布局在根据列表布局去改变
package com.kuang.lesson01;

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

public class WorkLayout {

    public static void main(String[] args) {

        Frame frame = new Frame("习题");

        Panel p1 = new Panel();
        Panel p2 = new Panel();

        Button b1 = new Button("b1");
        Button b2 = new Button("b2");
        Button b3 = new Button("b3");
        Button b4 = new Button("b4");
        Button b5 = new Button("b5");
        Button b6 = new Button("b6");
        Button b7 = new Button("b7");
        Button b8 = new Button("b8");
        Button b9 = new Button("b9");
        Button b10 = new Button("b10");

        frame.setLayout(new GridLayout(2,1));

        frame.add(b1);
        frame.add(p1);
        frame.add(b2);
        frame.add(b3);
        frame.add(p2);
        frame.add(b4);

        p1.setLayout(new GridLayout(2,1));
        p1.add(b5);
        p1.add(b6);

        p2.setLayout(new GridLayout(2,2));
        p2.add(b7);
        p2.add(b8);
        p2.add(b9);
        p2.add(b10);

        frame.setSize(600,400);
        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

3、总结

1、Frame 是一个顶级窗口

2、Panel 无法单独显示,必须添加到某个容器中

3、 布局管理

​ 1、流式

​ 2、东西南北中

​ 3、表格

4、大小、定位、颜色、可见性、、、、监听

4、事件

当某个事件发生的时候? 该做什么事情、

package com.kuang.lesson02;

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 TestActionEvent {

    public static void main(String[] args) {
        // 按下一个按钮,触发一个事件
        Frame frame = new Frame();
        Button button = new Button("btn1");

        //因为addActionListener(),需要一个ActionListener,所以我们需要构造ActionListener
        MyActionListener myActionListener = new MyActionListener();
        button.addActionListener(myActionListener);

        frame.add(button,BorderLayout.CENTER);
        frame.pack();
        frame.setSize(400,400);
        frame.setVisible(true);
        windowClose(frame);

        // 应用 -- 网络编程, 按下一个按钮  触发一个事件发送一个消息

    }

    //关闭窗口抽象成一个方法
    private static void windowClose(Frame frame) {
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

class MyActionListener implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("aaa");
    }
}

两个按钮,控制一个事件、包括 开始-关闭

package com.kuang.lesson02;

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 TestActionEventTwo {

    public static void main(String[] args) {
        // 两个按钮实现一个监听    -- 开始   停止
        Frame frame = new Frame("开始-关闭");

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

        button1.setActionCommand("start");

        MyMonitor myMonitor = new MyMonitor();

        button1.addActionListener(myMonitor);
        button2.addActionListener(myMonitor);

        frame.add(button1,BorderLayout.NORTH);
        frame.add(button2,BorderLayout.SOUTH);
        frame.setSize(300,300);
        frame.setVisible(true);

        windowClose(frame);

    }

    private static void windowClose(Frame frame){
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

class MyMonitor implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("点击了按钮:msg==>" + e.getActionCommand());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值