Frame,Panel和三种布局管理器

2023-11-15

窗体Frame

举例:
单个窗体

 //frame窗体存在在内存中,看不见
        Frame frame = new Frame("我的JAVA窗体");

        //设置窗体的可见性
        frame.setVisible(true);

        //设置窗体的尺寸
        frame.setSize(400,400);

        //设置窗体颜色
        frame.setBackground(Color.BLACK);
        //自定义颜色
        //frame.setBackground(new Color(1,1,1));

        //窗体弹出的初始位置
        frame.setLocation(200,200);

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

运行结果为:
窗体结果
多个窗体,运用封装,MyFrame这个类继承Frame

public static void main(String[] args) {
        //展示多个窗口
        MYFrame myFrame1 = new MYFrame(100, 100, 200, 200,Color.WHITE);
        MYFrame myFrame2 = new MYFrame(300, 100, 200, 200,Color.BLUE);
        MYFrame myFrame3 = new MYFrame(100, 300, 200, 200,Color.CYAN);
        MYFrame myFrame4 = new MYFrame(300, 300, 200, 200,Color.darkGray);

    }
}
class MYFrame extends Frame{
    //可能存在多个窗体,加上一个计数器
    static int id=0;

    //int x,int y表示初始化位置,int w,int h表示窗体大小
    public MYFrame(int x,int y,int w,int h,Color color){

        //调用父类,表示窗体的title,每调用一次ID自增一
        super("MYFrame"+(++id));
        //setBounds相当于setSize+setLocation
        setBounds(x,y,w,h);
        setBackground(color);
        setVisible(true);
    }
        }

运行结果为:
多个窗体运行结果

面板Panel

  1. Panel可以看成一个空间,但不能单独存在,panel需要放在frame中使用,Panel的坐标是相对于Frame的坐标
  2. frame.setLayout(null);设置默认布局,要不然会存放在左上角
  3. 最后添加窗体的可见性frame.setVisible(true);
    举例:
 public static void main(String[] args) {
        Frame frame = new Frame();

        //布局的概念
        Panel panel = new Panel();

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

        //坐标
        frame.setBounds(300,300,500,500);
        frame.setBackground(new Color(101, 41, 131));

        //panel 设置坐标,相对于Frame,相对坐标
        panel.setBounds(50,50,400,400);
        panel.setBackground(new Color(181, 48, 200));

        //在窗体上添加面板
        frame.add(panel);

        frame.setVisible(true);
    }

}

运行结果:
Panel
关闭窗体:监听事件,会出现许多不必要的方法

frame.addWindowListener(new WindowListener()

这里需要适配器方法

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

布局管理器

流式布局FlowLayout
举例:

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

        //添加组件
        Button button1 = new Button("button1");
        Button button2 = new Button("button2");
        Button button3 = new Button("button3");
        Button button4 = new Button("button4");

        //设置为流式布局,默认在中间位置
        frame.setLayout(new FlowLayout());
        //4个Button靠左
        frame.setLayout(new FlowLayout(FlowLayout.LEFT));
        
        frame.setSize(300,300);
        //添加到窗体上
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.add(button4);

        frame.setVisible(true);
    }
}

运行结果:
Flow Layout

东西南北中
举例:

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

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

        frame.add(East,BorderLayout.EAST);
        frame.add(West,BorderLayout.WEST);
        frame.add(South,BorderLayout.SOUTH);
        frame.add(North,BorderLayout.NORTH);
        frame.add(Center,BorderLayout.CENTER);

        frame.setSize(500,500);
        frame.setVisible(true);
    }
}

运行结果为:
东西南北中
表格布局
举例:

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

        Button bnt1 = new Button("bnt1");
        Button bnt2 = new Button("bnt2");
        Button bnt3 = new Button("bnt3");
        Button bnt4 = new Button("bnt4");
        Button bnt5 = new Button("bnt5");
        Button bnt6 = new Button("bnt6");

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

        frame.add(bnt1);
        frame.add(bnt2);
        frame.add(bnt3);
        frame.add(bnt4);
        frame.add(bnt5);
        frame.add(bnt6);

        frame.pack();//按照窗体大小自动填充
        frame.setVisible(true);

    }
}

运行结果:
表格布局
嵌套布局

思路:总体是一个两行一列的表格布局,在两个表格上加两个面板分别为P1和p3,P1的面板上利用BorderLayout添加两个Button放在左右两侧,C位在放一个面板p2,p2上在放上两个Button。同理在p3面板上利用BorderLayout放上两个Button,分别在左右两侧,C位放一个p4面板,利用for循环添加四个Button

举例:

public static void main(String[] args) {
		//窗体总体布局
        Frame frame = new Frame();
        frame.setVisible(true);
        frame.setSize(400,300);
        frame.setLocation(100,100);
        frame.setBackground(Color.darkGray);
        //总体的两行一列
        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("wast-1"),BorderLayout.WEST);
        //表格布局,直接填充了
        p2.add(new Button("button1"));
        p2.add(new Button("button2"));
        //将面板p2放在面板p1上
        p1.add(p2,BorderLayout.CENTER);

        //放置下半部分
        p3.add(new Button("east-2"),BorderLayout.EAST);
        p3.add(new Button("wast-2"),BorderLayout.WEST);
        for (int i = 3; i <7 ; i++) {
            p4.add(new Button("button"+i));
        }

        p3.add(p4,BorderLayout.CENTER);

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


    }

}

运行结果:
practice结果

源代码参考GUI-Study—>lesson1->testPanel

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Frame,Panel和三种布局管理器 的相关文章

  • Git教程:标签

    实际上看到这边 对于Git分支仓库这些概念以及commit push pull等操作 但是有些东西我们可能常见到 但是不怎么经常用的 tag 标签其实就算一个 我们下载一些开源项目的时候 在GitHub上经常看到版本 有的项目是通过tag来
  • systemui

    一 SystemUI 概述 二 模块基本布局 三 模块内部框架 四 模块流程 五 重要文件的介绍 一 SystemUI 概述 1 Statusbar 的功能作用 1 1 状态栏的通知功能 包括时间 通知 系统状态等 1 2 状态栏的日期显示
  • VBA &金融

    汇总数据 算提成 G py 210523finance VBA专题12 课程需用材料 Sub Macro1 Dim ws As Worksheet Dim i As Integer For i 1 To 20 Set ws Sheets A

随机推荐

  • kotlin 中intent的传值应用

    main Activity fun intent position Int content String var intent Intent this MainActivity TestActivity class java var bun
  • org.apache.poi.ss.usermodel.Cell.setCellValue(Ljava/time/LocalDateTime;)V

    java 导出功能 出现错误的原因是 实体中存在日期 而导出的时候Excel无法转换日期类型 解决方法 在实体中将日期类型转换为String类型 ColumnWidth 25 ExcelProperty value 计划开始日期 index
  • 100道Python练习题集合,拿去刷

    看书 看视频都可以帮助你学习代码 但都只是辅助作用 学好Python 最重要的还是多敲代码 多刷题 不知道怎么找题刷题的小伙伴 可以看看小编今天带来的 Python100练习题 覆盖了基本语法 数据结构 算法等多个方面 100道Python
  • moviepy音视频开发:使用credits1给视频加片头片尾字幕

    前往老猿Python博文目录 一 概述 在 moviepy音视频剪辑 视频基类VideoClip子类DataVideoClip UpdatedVideoClip ImageClip ColorClip TextClip类详解 介绍了Text
  • 通过NodeJS对接微信客服实现第三方API管理消息

    最近项目有个需求 要对接微信客服 之前也没做过 一脸懵逼 我属于那种不知其然 就心里很没底的人 感觉不知道怎么去开发了 所以就趁着后端还没开发完接口 先自己对接一下试试 接下来就是整个流程 首先我们先注册一个企业微信 这一步是必须的 因为我
  • map根据属性排序、取出map前n个后n个

    map 按 key 升序排序 map 按 key 升序排序 param map return private Map
  • linux top命令详解

    一 top简介 top命令经常用来监控linux的系统状况 是常用的性能分析工具 能够实时显示系统中各个进程的资源占用情况 在Linux操作系统中 top是使用最频繁 也是比较全的一个命令 Top命令类似于Windows系统的任务管理器工具
  • python找不到reshape_python – AttributeError:’Tensor’对象没有属性’reshape’

    我想写一个去噪自动编码器 为了可视化的目的 我想打印出损坏的图像 这是我想要显示损坏图像的测试部分 def corrupt x noise tf random normal shape tf shape x mean 0 0 stddev
  • 调速阀------电磁阀

    目录 调速阀 节流阀简图的理解 安装方式 注意 安装注意事项 电磁阀 1 直动式电磁阀 2 分步直动电磁阀 3 先导式电磁阀 二位二通电磁阀 二位三通电磁阀 二位四通电磁阀 三位三通电磁阀 三位四通电磁阀 管道联系式电磁阀 直接控制式电磁阀
  • 芷菏随身wifi14.5 相关教程

    芷菏随身wifi 芷菏都知道 sim一般都是没有密码 直接可以切换的 是可以直接用ARDC连接投屏到电脑上的 按住随身wifi上的按钮 进入9008模式 可以将随身wifi刷boot模块 再从投屏中修补面具 起到root的效果 这款sim1
  • python发送邮件(带附件)

    usr bin python coding UTF 8 import logging import smtplib from email mime multipart import MIMEMultipart from email mime
  • jquery mobile和ajax,使用jquery mobile不可忽视的细节

    jQuery Mobile 是创建移动WEB应用程序的框架 在学习和使用该框架的过程中 有一些心得想要和大家分享一下 一 框架 因为是移动端开发 所以不要忘了下面这个重要的meta标签哦 使用jquery mobile要引入相应的css文件
  • 数据的探索性分析

    探索一下 数据分析的起点 数据分类 一 描述性分析 整理数据 定义 主要作用 可视化技术 定义 主要作用 常用方法 二 相关性分析 分析数据 定义 主要作用 相关性分类 相关性测定 三 假设检验 分析数据 定义 作用 步骤 相对理论 常见的
  • 对某底层硬件模块编写底层程序的主要步骤及经验

    一 禁止硬件模块运行 配置好相关寄存器 这里的硬件模块是指那些CPU发一些指令后就能独立工作的模块 二 置位硬件模块控制寄存器的使能位 使能硬件模块 三 明确功能 搞清楚哪些工作是由硬件来做的 哪些该由软件来执行 四 当由硬件模块来做的工作
  • NAPI(New API)的一些浅见

    NAPI真的是kernel开发者词穷想的名字吧 你看看kernel里面各种名字 不知道为啥就不能起个好听点的 言归正传 wiki https en wikipedia org wiki New API 给出的解释是NAPI是一种用于网络设备
  • PyTorch基础练习-task4(用PyTorch实现多层网络)

    PyTorch基础练习 task4 一 引入模块 读取数据 二 构建网络模型 三 损失函数与优化器 四 开始训练模型 五 模型预测结果评估 一 引入模块 读取数据 从sklearn包中直接加载糖料病数据集 二 构建网络模型 三 损失函数与优
  • 【uniapp】uni-datetime-picker组件修改分钟选项为每15分钟的时间间隔 (0 15 30 45)

    一开始没打算写这个功能实现 毕竟不是自己写的组件 而是去改uniapp的扩展组件 但是确实在修改的时候上网查 没有查到关于这种功能实现的准确信息 所以在功能完成后也写一份 希望能给需要的人一个参考 做项目遇到一个关于时间预约的功能 最开始给
  • JetBrains全家桶(IDEA、Pycharm等各个产品)在国内高速下载地址

    JetBrains产品在国内有CDN下载通道 下面给出各个产品的下载链接 在某些情况下 官网无法访问 可以使用下面的链接直接下载 只需要照模样修改后缀名和年份版本号即可 操作系统后缀 Win exe 安装版 Win win zip 解压版
  • MySQL按条件删除指定数据(删除整行)

    delete from tb where update tb set string helloworld where name louyujing and type 1
  • Frame,Panel和三种布局管理器

    窗体Frame 举例 单个窗体 frame窗体存在在内存中 看不见 Frame frame new Frame 我的JAVA窗体 设置窗体的可见性 frame setVisible true 设置窗体的尺寸 frame setSize 40