JAVA的图形用户界面布局GUI入门(上)

2023-10-28

java的GUI企业里面用的比较少,现在主流的UI都使用HTML5 开发。

Java提供了三个主要包 做GUI开发:

java.awt 包 – 主要提供字体/布局管理器
javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)
java.awt.event 包 – 事件处理,后台功能的实现。

界面主要包括:

组件/控件 – 就是界面中的各种组成部分,比如:按钮、文本框、标签、表格…
容器 – 容器也是组件的一种,能容纳其它组件,比如:窗口、面板
布局管理器 – 组件在容器中的大小和位置由 布局管理器 控制。

常见的类/接口:

JFrame(窗口)、JPanel(面板)、JButton(按钮)、JTextField(文本框)、JLabel(标签)

常见的布局方式

FlowLayout(流布局)、BorderLayout(边框布局)、GridLayout(网格布局)

FlowLayout(流布局)

流布局象在word中打字,组件从左向右排列,一行排满后自动换下一行。组件默认居中对齐,可以设置为左/右对齐。流布局会维持组件的原始大小。流布局是 JPanel(面板)的默认布局。
容器可以使用setLayout()方法改变布局。

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class TestFlowLayout {
    public static void main(String[] args) {
        JFrame jf = new JFrame("流布局DEMO"); //建立一个窗口
        FlowLayout fl = new FlowLayout();  //使用流布局
        jf.setLayout(fl);//修改布局管理
        JButton jb1 = new JButton("按钮1"); //创建一个按钮
        jf.add(jb1); //把按钮jb1放入窗口
        JButton jb2 = new JButton("按钮2");//创建一个按钮
        jf.add(jb2);//把按钮jb2放入窗口
        jf.setSize(600, 300); //设置窗口的大小
        jf.setLocation(300,200);//设置窗口的初始位置
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口
        jf.setVisible(true); //显示窗口
    }
}

界面显示如下:
流布局

BorderLayout(边框布局)

边框布局把整个窗口分成了5个部分,上北下南左西右东,剩下的是中部。其中,北和南是整行,而中/西/东都不是整列。一般只会出现2个或3个部分。组件放入时需要指定放在哪个区域,默认放在中部。每个部分只能存放一个组件,如果存放多个就会覆盖前面的。如果想放多个组件,必须借助面板。组件在边框布局中不保持原始大小,会充满整个区域。JFrame的默认布局就是边框布局。如果某个部分不出现,这个区域会被出现的部分挤占。

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class TestBorderLayout {
    public static void main(String[] args) {
        JFrame jf = new JFrame("DEMO窗口");
        JButton jb = new JButton("红中");
        jf.add(jb); //把按钮放入边框布局的中部

        JButton jb1 = new JButton("东风");  //创建一个按钮
        jf.add(jb1,BorderLayout.EAST);     //放在东部

        JButton jb2 = new JButton("南风"); 
        jf.add(jb2,BorderLayout.SOUTH);     //放在南部

        JButton jb3 = new JButton("西风"); 
        jf.add(jb3,BorderLayout.WEST);      //放在西部  

        JButton jb4 = new JButton("北风"); 
        jf.add(jb4,BorderLayout.NORTH);     //放在北边

        jf.setSize(600, 300);               //设置按钮的大小
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭
        jf.setVisible(true);//显示窗口
    }
}

界面显示如下:
边框布局

GridLayout(网格布局)

网状布局就是把窗口分成几行几列的表格方式,构造时需要指定行数和列数。组件在网状布局中不保持原始大小,会充满整个区域。组件在网状布局中,一个格子只放一个组件,自动向后走。

import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class TestGrid {
    public static void main(String[] args) {
        JFrame jf = new JFrame("网状布局DEMO");
        GridLayout gl = new GridLayout(5,4); //5行4列的表格
        jf.setLayout(gl); //修改布局为网状 5 行 4 列
        for(int i=0;i<20;i++){
            JButton jb = new JButton(i+""); //数字转String
            jf.add(jb);
        }
        //jf.setSize(600,300); //设置大小
        jf.pack(); //自动调整大小
        jf.setLocation(300,200); // 设置初始的位置
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭
        jf.setVisible(true); //解决了初始不可见的问题
    }

}

界面显示如下:
网状布局

实用案例:制作一个计算器界面
注意:JPanel(面板)的默认布局是流布局,setLayout()方法可以改变容器的布局方式

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MyCompute {
    public static void main(String[] args) {
        JFrame jf = new JFrame("计算器"); //创建一个窗口
        JTextField jtf = new JTextField("0",20); //初始的文本为0,长度是20
        jf.add(jtf,BorderLayout.NORTH); 
        String[] lab = {"CE","C","+/-","BackS","7","8","9","+","4","5","6",
            "-","1","2","3","*","0",".","=","/"}; //按键上的文本
        JPanel jp = new JPanel(); //创建面板
        GridLayout gl = new GridLayout(5,4); //创建网格布局
        jp.setLayout(gl); //将面板的布局方式改为网格布局
        for(int i=0;i<lab.length;i++){
            JButton jb = new JButton(lab[i]); //创建按钮
            jp.add(jb);//将创建出来的按钮都放入面板
        }
        jf.add(jp);//将面板放入窗口
        jf.pack(); //自动调节大小
        jf.setResizable(false);//不能改变窗口的大小
        jf.setLocation(300,200); // 设置初始的位置
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭
        jf.setVisible(true); //解决了初始不可见的问题
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA的图形用户界面布局GUI入门(上) 的相关文章

随机推荐

  • Unity 编辑器扩展-自定义窗口绘制线条的几种方法

    最近在研究Unity编辑器扩展 想要制作动作游戏的技能编辑器 下载了别人写的半成品研究源代码 准备自己模仿着写一个 动作游戏的技能编辑器需要以时间轴为基础 在各个时间节点添加事件 所以首先就是要绘制一个时间轴 在这个源代码中别人是使用的GL
  • 数字电路设计之D触发器的门级实现

    直接使用行为级描述太简单了 没有一点挑战性 还是用门级描述还有点意思 直接附代码 如果你看代码可以在脑袋里面显示出完整的触发器及锁存器的图 那么你的锁存器和触发器学的很ok啊 1 D触发器代码 module D flip flop clk
  • 工业级5G路由器/ 5G工业路由器

    产品简介 工业级路由器系列产品 是集 4G 5G 网络 虚拟专用网等 技术于一体的物联网无线路由器产品 该设备凭借 4G 5G 无线广域网双网备份以及 Wi Fi 无线局域网等技术 提供不间断的多种网络接入能力 以其全面的安全性和无线服务等
  • Maven报错:The packaging for this project did not assign a file to the build artifact

    一 问题发生 我想使用IDEA的Maven管理工具将项目安装到本地仓库 于是选择了Plugins下的install install去执行 如下图所示 结果出现了如下报错信信息 ERROR Failed to execute goal org
  • 想自学写个操作系统,有哪些推荐看的书籍?

    前言 哈喽 我是子牙 一个很卷的硬核男人 喜欢研究底层 聚焦做那些大家想学没地方学的课程 手写操作系统 手写虚拟机 手写编程语言 今天我们将站在一个自学者的角度来聊聊如何实现自己的操作系统 并为大家推荐几本能够帮助你巩固知识 修炼内功的书籍
  • 使用base64编码的好处

    在项目中 将报文进行压缩 加密后 最后一步必然是使用base64编码 因为base64编码的字符串 更适合不同平台 不同语言的传输 它不受其他编码的影响 仍然保持不变 这点很有意义 如下验证 String a 123412312sfwefw
  • Vue使用AWS s3进行大文件的分片上传、断点续传、下载(将文件上传进度显示)

    这篇博客已经将这些aws S3的Api集成为了一个js文件 直接引用就可以了 就不需要这么复杂 将AWS S3大文件文件上传相关的API集成为js文件 功能包括 多文件并行上传 文件分片上传 断点续传 文件分片合成 上传暂停 取消上传 文件
  • 浅浅记录一下初次跑大模型的过程

    之前主要搞搞ros小车方面的东西 由于本科是学机械方面的 对于深度学习 大模型一类的东西完全没有概念 但是由于需要 接触计算机视觉方面内容 过程很艰辛 即便是有很专业的女朋友帮助 初次跑完浅浅记录一下 希望对没接触过相关领域的同学们有一定的
  • vue 跳转页面并且传值以及在新窗口打开页面的方法

    vue 跳转页面并且传值以及在新窗口打开页面的方法 第一步 vue跳转页面的时候要是不带自动生成路径的话 是需要自己配置页面的路由的 在这里进行配置就可以 里面会有案例自己跟着配置就好 第二步 配置完成后就可以进行跳转了 代码如下 跳转页面
  • 读读文档吧 - SQLAlchemy 2.0

    ORM Mapped Class Overview https docs sqlalchemy org en 20 orm mapping styles html The original mapping API is commonly r
  • Python+Flask(2)--通过flask paginate解决列表分页问题

    先看最终实现效果 实现主要步骤及重要代码如下 1 列表需要用到的数据源及内容自己随便建立 我这边用新闻资讯数据测试 CREATE TABLE article aid int 11 NOT NULL AUTO INCREMENT cat id
  • 【第一章】专栏介绍

    版本 修改时间 初稿 2023 03 26 补充 考研和就业的选择 2023 04 04 自我介绍 你好 我曾经是一名普通一本学生 专业是电子信息工程专业 从大二就开始独自一人自学后端开发 大三后面三年大部分时间都在图书馆或者实验室学习 在
  • 如何上传大文件(4GB)到虚拟机

    使用xhell上传大文件会报文件过大的异常 解决方案 可以使用 Everything 工具 实现快速便捷传送大文件到虚拟机 1 百度搜索Everything 进入官网下载 这个程序体量非常小 可以放心下载 2 下载完成后打开 点击工具一栏
  • linux下MySql服务器的安装(yum安装OK)

    root test219 mysql mysql V mysql Ver 14 14 Distrib 5 5 11 for Linux x86 64 using readline 5 1 mysql5 5在linux服务器上的安装 mysq
  • 2021.11.12总结

    把入门3循环结构的题大致写完了
  • 树莓派4B之Windows XP系统安装游戏(一)

    上一篇博文 树莓派4B安装windows xp windows 95 windows xp windows 95 for raspberry pi 4B 下一篇博文 树莓派4B之Windows XP系统安装游戏 二 目录 一 模拟器 游戏下
  • AI新手必看:如何区分参数和超参数

    相信所有人刚开始应用机器学习时 都会被两个术语混淆 计算机学科里有太多的术语 而且许多术语的使用并不一致 哪怕是相同的术语 不同学科的人理解一定有所不同 比如说 模型参数 model parameter 和 模型超参数 model Hype
  • 华为nova6se怎么升级鸿蒙,华为EMUI11支持哪些手机

    华为EMUI11适配机型有什么 首批支持EMUI11 更新的机型有 P40 系列 Mate30 系列 MatePad Pro系列等 10 款机型 先了解更多EMUI11适配机型相关内容的小伙伴下面和小编一起来看看吧 华为EMUI11适配机型
  • VC++ 图像颜色调节

    1 BMP图片在GDI方式下贴图 32位位图 半透明像素会显示黑色或白底 像素处理代码 void CrossImage CImage img if img IsNull return 确认该图像包含Alpha通道 if img GetBPP
  • JAVA的图形用户界面布局GUI入门(上)

    java的GUI企业里面用的比较少 现在主流的UI都使用HTML5 开发 Java提供了三个主要包 做GUI开发 java awt 包 主要提供字体 布局管理器 javax swing 包 商业开发常用 主要提供各种组件 窗口 按钮 文本框