JavaGUI 02 第一个Frame窗口

2.1 第一个Frame窗口


2.1.1 初识容器

2.1.1.1 容器 frame(窗口的主体框架

package com.muquanyu.lesson01;

import java.awt.*;

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

        //Frame 对象
        Frame frame = new Frame();

        //这个东西创建完是在内存里的,然后我们要设置可见性
        frame.setVisible(true);
        //设置窗口大小
        frame.setSize(400,400);
        //设置背景颜色
        //Color color = new Color()
        frame.setBackground(Color.black);
        //弹出的初始位置
        frame.setLocation(200,200);

        //设置大小固定
        frame.setResizable(false);
    }
}

这样就能写出你的第一个 窗口程序了。不过呢 ~ 你只 new 了一个 frame 主体,所以 就是个 窗口。。

  • 封装普通类方法
package com.muquanyu.lesson01;

import java.awt.*;

public class TestFrameII {
    public static void main(String[] args) {
        int x = 100;
        int y = 200;
        for(int i = 0;i<10;++i)
        {
            new MyFrame().create("你好"+(i+1),x+i*200,200,100,100,Color.black);
        }
        System.out.println(new MyFrame().num);


    }
}
class MyFrame extends Frame{
    public static int num = 0;
    public static boolean create(String title,int x,int y,int height,int width,Color color)
    {
        Frame frame = new Frame();
        if(frame == null)
        {
            return false;
        }


        frame.setTitle(title);
        frame.setVisible(true);
        frame.setSize(width,height);
        frame.setLocation(x,y);
        frame.setBackground(color);
        frame.setResizable(false);
        num++;

        return true;
    };

}

在这里插入图片描述


2.1.1.2 面板 Panel

相当于 分组框,就是对某个区域进行单独的分组!这个区域有自己的组件,和其它组件基本上是不和其它组件和区域产生关系的。除非你非要 建立 联系!

Panel 必须建立在 frame 主体上!它不能单独存在,所以我才把它叫做分组框。因为它和组件一样 需要建立在 frame上。

  • Panel(用来布局窗口内的组件、分组)
package com.muquanyu.lesson01;

import java.awt.*;

public class TestPanel {
    public static void main(String[] args) {
        Frame f = new Frame();
        //布局的概念
        Panel panel = new Panel();

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

        //坐标
        f.setBounds(300,300,500,500);
        f.setBackground(new Color(73, 173, 53, 255));

        //panel 也要设置坐标,但它是相对于 frame
        panel.setBounds(50,50,400,400);

        panel.setBackground(new Color(128, 36, 36));

        //添加容器 panel
        f.add(panel);

        f.setVisible(true);
    }
}

在这里插入图片描述

  • 添加监听事件(监听窗口关闭事件
    在这里插入图片描述
 f.addWindowListener(new WindowListener() {
            @Override
            public void windowOpened(WindowEvent e) {
                
            }

            @Override
            public void windowClosing(WindowEvent e) {

            }

            @Override
            public void windowClosed(WindowEvent e) {

            }

            @Override
            public void windowIconified(WindowEvent e) {

            }

            @Override
            public void windowDeiconified(WindowEvent e) {

            }

            @Override
            public void windowActivated(WindowEvent e) {

            }

            @Override
            public void windowDeactivated(WindowEvent e) {

            }
        });

你会发现 frame 这个主体框架 的事件有很多,当你 new 一个匿名内部类的时候。会有大量的方法 自动生成!让你去填写它们的代码。而这些 出现的方法 其实 就是我们一直说的 事件!
但是出现的 事件太多了,我们不需要这么多,比如说我们现在只需要监听窗口关闭的事件,那么我们就只需要关闭的那个方法就行了。

这个时候,我们就需要 用到 “适配器”,即 windowAdapter()

Java 的这个 WindowAdapter 适配器,是 implements WindowListener, WindowStateListener, WindowFocusListener 的从这里可以看出 它 是一个 帮助 这些接口 实现方法 的子类。那么它的任务就是 帮忙实现方法呗。所以 要实现哪个 就 写哪个。而不需要全写!比如说 我们的 windowClosing 这个关闭事件,我们就只需要 写 这一个方法就行。

f.addWindowListener(new WindowAdapter() {
            @Override
            //这个的意思就是 窗口点击关闭的时候,需要做的事情是什么?
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(0);//需要做的事情是 退出程序!
            }
        });

这样我们 就可以在点击关闭的时候,就可以 退出程序了。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值