GUI编程
怎么学?
- 这是什么?
- 它怎么玩?
- 该如何去在我们平时运用?
- 反编译 :把class -> 可阅读 文件
需要学的东西
组件
- 窗口
- 弹窗
- 面板
- 文本框
- 列表框
- 按钮
- 图片
- 监听事件
- 鼠标
- 键盘事件
- 外挂:java写
- 破解工具
细分两个模块
1.简介
GUI 是图形用户界面的首字母缩写,即允许用户通过图形元素与电子设备(如计算机、笔记本电脑、智能手机和平板电脑)进行交互的界面。在人机交互方面,它是软件应用程序编程的重要组成部分,用用户友好的操作取代基于文本的命令。它的目标是为用户提供易于查找、理解和使用的决策点。换句话说,GUI允许您使用鼠标,笔甚至手指控制设备
GUI 核心技术: Swing AWT (学Java,就是在学一个一个类)
不流行的原因:
1.因为界面不美观。
2.需要jre环境!
为什么要学习?
它是MVC架构的基础
以后学习MVC的架构,在GUI编程里面会发现很多思想(监听器的思想)
1.可以写出自己心中想要的一些小工具
2.工作的时候,可能需要维护到Swing界面,概率极小!
3.了解MVC架构,了解监听!
2.AWT
它是 Swing 的前身
它 里面有大量原生的代码,会用得到
它和 Swing 的逻辑十分相似
用 AWT 讲解一些底层的实现
2.1、Awt介绍
java里面万物皆对象
new类!
AWT 里面有很多一些列的类
AWT:抽象的窗口工具
1.包括很多类和接口!
用于 GUI 编程
GUI : 图形用户界面编程(画窗口)
Eeclipse:用java写的
2.AWT有很多元素
窗口吗,按钮,文本框,
3.java.awt 包
包的位置
AWT知识和类!
2.2、组件和容器
1、框架 Frame
package com.kuang.lesson01;
import java.awt.*;
//GUI的第一个页面
//测试框 TestFrame
public class TestFrame {
public static void main(String[] args) {
//Frame对象 怎么用? 看jdk 看源码!
Frame frame = new Frame("我的第一个Java图像界面窗口");
//设置窗口大小
frame.setSize(400,400);
//弹出的初始位置
//定位
frame.setLocation(200,200);
//设置背景颜色 需要Color类
// new Color()
frame.setBackground(new Color(22, 127, 220));
//设置大小固定
// 可调整大小
frame.setResizable(false);
//需要设置可见性 窗口默认大小 w h
frame.setVisible(true);
}
}
问题:发现窗口关闭不掉,解决:停止java程序
尝试回顾封装,继承:
展示多个窗口
package GUI.lesson01;
import java.awt.*;
public class testframe2 {
public static void main(String[] args) {
//展示多个窗口 new
new myframe(100,100,200,200,Color.blue);
new myframe(100,300,200,200,Color.YELLOW);
new myframe(300,100,200,200,Color.green);
new myframe(300,300,200,200,Color.white);
}
}
class myframe extends Frame{
static int id = 0; //可能多个窗口,我们需要一个构造器
public myframe(int x,int y,int w,int h,Color color){
super("myframe"+(++id));
setBackground(color);
setBounds(x,y,w,h);// setlocation+setsize
setVisible(true);
setResizable(false);
}
}
2、面板 panel
解决了关闭事件!
package GUI.lesson01;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//panel 可以看成一个空间,但不能单独存在
public class testpanel {
public static void main(String[] args) {
Frame frame = new Frame();
//存在布局的概念
Panel panel = new Panel();
//设置布局
frame.setLayout(null);
//设置frame的坐标
frame.setBounds(300,300,500,500);
frame.setBackground(new Color(40,161,35));
//panel设置坐标,颜色,相对于frame
panel.setBounds(50,50,400,400);
panel.setBackground(new Color(255, 0, 78));
//窗口添加面板
frame.add(panel);
//可见性
frame.setVisible(true);
// 系统 出口
// 监听事件,监听窗口关闭事件 System.exit(0)
// 适配器模式:
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
//结束程序
System.exit(0);
}
});
}
}
2.3、布局管理器 Layout
- 流失布局 从左到右 Flow
package GUI.lesson01;
import java.awt.*;
public 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());
//设置大小
frame.setSize(200,200);
//添加按钮
frame.add(button1);
frame.add(button2);
frame.add(button3);
//需要设置可见性 窗口默认大小
frame.setVisible(true);
}
}
- 东西南北 上下结构 Border
package GUI.lesson01;
import java.awt.*;
public class testboderlayout {
public static void main(String[] args) {
Frame frame = new Frame("testboderlayout");
//按钮位置东西南北中
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(200,200);
//可见性
frame.setVisible(true);
}
}
- 表格布局 Grid 三行两列
package GUI.lesson01;
import java.awt.*;
public class testGridLayout {
public static void main(String[] args) {
Frame frame = new Frame("testGridLayout");
Button btin1 = new Button("btin1");
Button btin2 = new Button("btin2");
Button btin3 = new Button("btin3");
Button btin4 = new Button("btin4");
Button btin5 = new Button("btin5");
Button btin6 = new Button("btin6");
frame.setLayout(new GridLayout(3,2));
frame.add(btin1);
frame.add(btin2);
frame.add(btin3);
frame.add(btin4);
frame.add(btin5);
frame.add(btin6);
frame.pack();//Java函数! 表格自动布局
frame.setVisible(true);
}
}
课堂练习讲解总结
分解过程
package GUI.lesson01;
//练习的demo
import java.awt.*;
import java.security.KeyStore;
public class Exdemo {
public static void main(String[] args) {
//总frame
Frame frame = new Frame();
//frame显示出来
frame.setSize(400,300);
frame.setLocation(300,400);
frame.setBackground(Color.BLUE);
frame.setVisible(true);
//表格布局
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("west-1"),BorderLayout.WEST);
p2.add(new Button("p2-btn-1"));
p2.add(new Button("p2-btn-2"));
p1.add(p2,BorderLayout.CENTER);
//下面
p3.add(new Button("east-1"),BorderLayout.EAST);
p3.add(new Button("west-1"),BorderLayout.WEST);
//中间的4个
for (int i = 0; i < 4; i++) {
p4.add(new Button("for-"+i));
}
p3.add(p4,BorderLayout.CENTER);
frame.add(p1);
frame.add(p3);
}
}
总结:
-
Frame 是一个顶级窗口
-
Panel 无法单独显示,必须添加到某个容器中
-
Layout布局管理器
1.流式 flowlayout
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
2.东西南北中 borderlayout
Button west = new Button("west"); frame.add(west,BorderLayout.west);
3.网格 girdlayout
1.Button btin1 = new Button("btin1"); 2.frame.setLayout(new GridLayout(2,2)); 3.frame.add(btin1);
4.属性
1.大小
frame.setSize(200,200);
2.定位
//初始位置
frame.setLocation(400,400);
3.可见性
frame.setVisible(true);
4.背景颜色
frame.setBackground(Color.BLUE);
5.监听
frame.addWindowListener(new WindowAdapter() {
//窗口关闭的时候做的事情
@Override
public void windowClosing(WindowEvent e) {
//结束程序
System.exit(0);
}
});