笔记12:GUI编程
前言
怎么学:
- 是什么
- 怎么运行
- 如何应用
组件
- 窗口
- 弹窗
- 面板
- 文本框
- 列表框
- 按钮
- 图片
- 监听事件
- 鼠标
- 键盘事件
- 破解工具
简介
GUI核心技术:Swing AWT
并不流行,甚至快要被淘汰:
- 界面不美观
- 需要jre环境
为什么我们还要学习?
- 可以写出自己心中想要的一些小工具
- 工作时候,也可能需要维护到swing界面,概率极小!
- 了解MVC框架,了解监听!
AWT
AWT介绍
AWT Abstract Windows Tools 抽象窗口工具
GUI Graphical User Interface 图形用户接口
- 包含了许多类和接口
- 元素:窗口,文本框,按钮
- java.awt包
组件和容器
Frame
1 | //GUI的第一个界面 |
发现问题:程序无法关掉。方法:停止程序运行。
回顾封装:展示多个窗口
1 | public class TestFrame2 { |
Panel
面板不能单独存在,在容器里面,可以看成是一个空间
解决了关闭事件:
1 | //Panel可以看成是一个空间,但不能单独存在 |
布局管理器
三种布局
-
流式布局
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22public class TestFlowLayout {
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");
//设置流式布局 居中 靠左 靠右 等等
frame.setLayout(new FlowLayout());
//frame.setLayout(new FlowLayout(FlowLayout.LEFT));
//frame.setLayout(new FlowLayout(FlowLayout.RIGHT));
frame.setSize(200,200);
//添加按钮
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setVisible(true);
}
} -
东西南北中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame("BorderLayout");
Button button1 = new Button("East");
Button button2 = new Button("West");
Button button3 = new Button("South");
Button button4 = new Button("North");
Button button5 = new Button("Center");
frame.add(button1,BorderLayout.EAST);
frame.add(button2,BorderLayout.WEST);
frame.add(button3,BorderLayout.SOUTH);
frame.add(button4,BorderLayout.NORTH);
frame.add(button5,BorderLayout.CENTER);
frame.setSize(200,200);
frame.setVisible(true);
}
} -
表格布局 Gird
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26public class TestGirdLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button button1 = new Button("1");
Button button2 = new Button("2");
Button button3 = new Button("3");
Button button4 = new Button("4");
Button button5 = new Button("5");
Button button6 = new Button("6");
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.setSize(200,200);
frame.setVisible(true);
}
}
布局练习
通过不同布局的嵌套我们可以设计出我们想要的布局,下面是一个练习
布局解答
1 | public class Demo { |
总结
- Frame是一个顶级窗口
- Panel无法单独显示,必须添加到某个容器中。
- 三种布局管理器
- 流式
- 东西南北中
- 表格
- 设置 大小,定位,背景颜色,可见性,监听
事件监听
事件监听:当某个事件发生的时候,干什么?
按下按钮打印一行字符串
1 | public class TestAction { |
多个按钮共享一个事件:
1 | public class TestAction02 { |
输入框
TextField
1 | public class TextField01 { |
简易计算器,组合+内部类回顾复习!
实现一个简易的计算器,顺便回顾组合,内部类
组合是继承的另一种方式,OOP原则:组合大于继承
1 | public A extends B{ |
加法计算器
1 | //简易计算器 |
优化
1 | //简易计算器 |
完全改造为OOP
多态,继承什么三大特性都不建议使用,在企业开发中:继承增强了耦合性,多态让代码更麻烦,理解可能有错误
更应该使用内部类
内部类:
- 更好的包装
- 内部类最大的好处就是可以畅通无阻地访问外部类的属性和方法
1 | //简易计算器 |
画笔
1 | public class TestPaint { |
鼠标监听
目标:实现鼠标画画
1 | //鼠标监听事件 |
窗口监听
1 | public class TestWindow { |
键盘监听
1 | public class TestKeyListener { |
Swing
AWT是底层的,Swing是封装好的
窗口,面板
1 | public class TestJFrame { |
标签居中:
1 | public class JframeDemo02 { |
弹窗
JDialog用来被弹出,默认就有关闭事件
1 | //主窗口 |
标签
label
1 | new Jlabel("文字") |
图标Icon
1 | //图标,需要实现类,Frame继承 |
图片Icon
1 | public class ImageIconDemo extends JFrame { |
面板
JPanel
1 | public class JPanelTest extends JFrame { |
JScrollPanel
文本域
1 | public class JScrollDemo extends JFrame { |
按钮
图片按钮
1 | public class JButtonDemo extends JFrame { |
单选按钮
1 | public class JButtonDemo2 extends JFrame { |
复选按钮
1 | public class JButtonDemo3 extends JFrame { |
列表
下拉框
1 | public class ComboBoxDemo extends JFrame { |
列表
1 | public class ComboBoxDemo2 extends JFrame { |
应用场景
- 选择地区或一些单个选项
- 列表,展示信息,一般是动态扩容
文本框
文本框
1 | public class TextDemo extends JFrame { |
密码框
1 | public class TextDemo2 extends JFrame{ |
文本域
1 | public class JScrollDemo extends JFrame { |
贪吃蛇
帧,如果时间片足够小,就是动画,一秒30帧以上就已经达到动画效果,拆开是静态的图片
键盘监听
定时器 Timer
编程流程
- 定义数据
- 画上去
- 监听时事件
键盘监听
事件监听
运行类
1 | import javax.swing.*; |
方法类
1 | import com.wang.gui.Data; |
数据类
1 | import javax.swing.*; |
总结
GUI学习总结
常用()
1 | Frame; 框架 |
附件
B站狂神说JavaGUI贪吃蛇素材,仅供学习分享使用。
链接: https://pan.baidu.com/s/1YlguA9ZnhsLatsq8sdecSQ
提取码: gpdp
复制这段内容后打开百度网盘手机App,操作更方便哦
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 王同学の小屋!
评论