Java基础__04.GUI编程
GUI编程常见的组件:
- 窗口
- 弹窗
- 面板
- 文本框
- 列表框
- 按钮
- 图片
- 监听事件
- 鼠标操作
- 键盘事件
GUI简介
GUI的核心技术:Swing AWT,是需要jre环境的。
AWT介绍
- 包含了很多类和接口;
- 元素:窗口、按钮、文本框。。。
- java.awt包;

组件和容器
1、Frame
Frame即一个窗口,主要用来进行Panel的布局;通过new的方式创建一个窗口,然后设置相关的属性:大小、颜色、定位、可见性、监听。。。。
代码如下:
1 public class GuiTest {
2 public static void main(String[] args) {
3 // new 一个Frame
4 Frame frame = new Frame("我的第一个图形化界面");
5
6 // 设置可见性 默认是不可见的
7 frame.setVisible(true);
8
9 // 设置窗口大小
10 frame.setSize(500,500);
11
12 // 设置背景颜色 用到Color类
13 frame.setBackground(new Color(70,229,6));
14
15 // 弹出的初始位置 x、y的坐标值
16 frame.setLocation(500,500);
17
18 // 设置窗口大小固定,不可拉伸 默认是true,可拉伸的
19 frame.setResizable(false);
20 }
21 }
运行main方法,弹出如下窗口:

2、Panel
Panel,即面板,类似一个模块区域,它是不能单独存在的,需要依赖于Frame;在上面Frame的基础上,增加一个Panel,代码如下:
// 接上面的代码
// 设置布局:格式为null,即没有布局
frame.setLayout(null); // new 一个Panel
Panel panel = new Panel();
// 设置大小和位置,等价于setSize()和setLocation() 且它的位置是相对于Frame的
panel.setBounds(100,100,300,300);
panel.setBackground(new Color(154, 57, 45));
// 将panel添加到Frame中
frame.add(panel);
结果如下图:

问题:
上面两个图示的面板,点击关闭按钮是无法关闭的,若要关闭,只能停止程序。这里就需要用到Frame中的窗口监听事件,来进行窗口的关闭,代码如下:
// 接上面的代码
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// 结束程序
System.exit(0);
}
});
这里的WindowAdapter是实现了WindowListener的一个抽象类,因为WindowListener是一个接口,如果直接使用它的话,需要重写里面的所有方法,代码比较冗余,所以这里使用的是它的实现类,好处是可以重写指定的方法即可。此时的窗口就可以关闭了,本质也是关闭程序。
3、布局管理器
3.1 流式布局:FlowLayout
即所有的组件都是流式布局,按顺序排列的;
代码示例:
// 设置布局样式
panel.setLayout(new FlowLayout(FlowLayout.CENTER)); // 居中,也是默认的
// panel.setLayout(new FlowLayout(FlowLayout.LEFT)); // 靠左
// panel.setLayout(new FlowLayout(FlowLayout.RIGHT)); // 靠右
// new几个buttom模拟组件
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
// 将button添加到panel中
panel.add(button1);
panel.add(button2);
panel.add(button3);



3.2 东西南北中布局:BorderLayout
即:组件的布局分:东南西北中五个方位;
代码示例:
// 设置panel的布局样式 :东西南北中布局 BorderLayout
panel.setLayout(new BorderLayout());
// new几个button模拟组件
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");
// 将组件添加到panel中,注意添加方式和流布局的区别
panel.add(east,BorderLayout.EAST);
panel.add(west,BorderLayout.WEST);
panel.add(south,BorderLayout.SOUTH);
panel.add(north,BorderLayout.NORTH);
panel.add(center,BorderLayout.CENTER);

3.3 表格布局:GridLayout
即类似表格的一种布局,分几行几列;
代码示例:
// 设置panel的布局样式 :表格布局 GridLayout
// 这里需要指定几行几列。默认是一行,列数取决于添加的组件的个数
panel.setLayout(new GridLayout(3,2));
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");
panel.add(button1);
panel.add(button2);
panel.add(button3);
panel.add(button4);
panel.add(button5);
panel.add(button6);

各个布局之间是可以相互嵌套的,所以以上三种布局灵活运用,即可构建出不同的页面布局。
4、事件监听
to be continue...
Java基础__04.GUI编程的更多相关文章
- Java基础篇——Gui编程
AWT 抽象窗口工具 组件:按钮(button) 文本域(textarea) 标签(label) 容器(container)... Frame窗口 Frame frame = new Frame( ...
- 黑马程序员:Java基础总结----GUI图形化界面
黑马程序员:Java基础总结 GUI图形化界面 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! GUI(Graphical User Interface)图形化界 ...
- 黑马程序员:Java基础总结----GUI&网络&IO综合开发
黑马程序员:Java基础总结 GUI&网络&IO综合开发 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络架构 C/S:Client/Server ...
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- Java基础-初识面向对象编程(Object-Oriented-Programming)
Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...
- 黑马程序员——【Java基础】——GUI(图形用户界面)
---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.GUI(GraphicalUser Interface):又称图形用户界面,是计算机用户与计 ...
- java基础50道编程题
50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...
- 黑马程序员——JAVA基础之GUI
-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- GUI(图形用户界面) GUI • Graphical User Interface(图形用 ...
- java基础知识——网络编程、IO流
IO流 字节流:处理字节数据的流对象,计算机中最小数据单元就是字节.InputStream OutputStream 字符流:字符编码问题,将字节流和编码表封装成对象就是字符流.Reader Writ ...
- 黑马程序员——JAVA基础之网络编程
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 网络编程 网络模型:OSI参考模型和TCP/IP参考模型 网络通讯三要素: IP地址:InetA ...
随机推荐
- CF1358D The Best Vacation
题目传送门 思路 做这道题主要是需要发现一个性质:选择的区间必定是从某一个月的最后一天开始往前连续的一段区间. 考虑如何证明这个结论,设这个月有 \(x\) 天,假设有更优的方案满足到下一个月的第 \ ...
- js根据指定字段数据去重
//根据id去重 function unique(arr1) { const res = new Map(); return arr1.filter((a) => !res.has(a.id) ...
- spring boot 配置Bean
package com.example.demo.config; import com.example.demo.entiy.User; import org.springframework.cont ...
- Nginx 同一个域名自动识别 pc h5
首先设置环境变量 我们先设置变量,通过判断来改变变量的值(注: 我写在server中) set $is_mobile false; # 初始值 if ( $http_cookie ~* "A ...
- 【redis】配置优化及从库优先级
https://blog.51cto.com/u_15902893/5912902 vim /etc/redis/redis.conf ##################基础############ ...
- pypeeter 自动化
Pypputeer Puppeteer 是 Google 基于 Node.js 开发的一个工具,而 Pyppeteer 又是什么呢?它实际上是 Puppeteer 的 Python 版本的实现,但它不 ...
- 数据每三位增加一个逗号(即千分符) js
使用 toLocaleString() 另一种使用场景
- golang 用gorm生成module文件
网上的包过于繁琐复杂.所以写个简单.mysql的多种数据类型没有全部实现转化.可以编译成可执行文件. package main import ( "flag" "fmt& ...
- win10安装双版本mysql的方法
因为app作业缘故,之前装的mysql8.0版本无法兼容因此打算再装一个5.7版本的mysql,历经3,4天终于成功,现记录下这血一般的教训 首先官网下再mysql5.7.37的安装包 下载地址htt ...
- PHP二维数组根据某个元素(key)排序
/** * 二维数组根据key排序 * @param $arr * @param $arr_key * @param string $order 排序规则 * @return mixed */ fun ...