GUI 简介
1、概念:图形用户界面,是指采用图形方式显示的计算机操作用户界面
2、核心技术:Swing、AWT
3、优点
(1)可以写出我们心中想要的一些小工具
(2)工作时候,也许需要维护到 Swing 界面
(3)了解 MVC 架构,了解监听
AWT 介绍
1、Java 的包
2、awt包 含有多个类和接口,元素—窗口、按钮、文本框
Frame 窗口
1、、第一个GUI界面
import java.awt.*;
public class OneFrame {
public static void main(String[] args) {
// 按下 Ctrl 点击类名可查看源代码
Frame frame = new Frame("我的第一个Java图像界面窗口");
// 需要设置可见性 -> 默认为 false
frame.setVisible(true);
// 设置窗口大小
frame.setSize(500,500);
// 设置背景颜色
frame.setBackground(new Color(167, 100, 226));
// 设置弹出界面的初始位置
frame.setLocation(725,300);
// 设置大小固定 -> 默认为 true
frame.setResizable(false);
}
}
缺陷:无法关闭,只能手动停止 Java 程序
2、多个GUI界面——利用封装继承
import java.awt.*;
//展示多个窗口 new
public class MoreFrames {
public static void main(String[] args) {
MyFrame myFrame1 = new MyFrame(100,100,200,200,Color.blue);
MyFrame myFrame2 = new MyFrame(300,100,200,200,Color.yellow);
MyFrame myFrame3 = new MyFrame(100,300,200,200,Color.red);
MyFrame myFrame4 = new MyFrame(300,300,200,200,Color.MAGENTA);
}
}
// 定义界面
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);
//设置可见
setVisible(true);
}
}
Panel 面板
1、可看成一个空间,不可独立存在,需内嵌于 frame 中,且之后将文本等内容写在panel面板中
2、frame 与 panel
import java.awt.*;
public class Penal {
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(188, 118, 255));
//panel相对坐标
panel.setBounds(50,50,400,400);
//颜色
panel.setBackground(new Color(255, 131, 235));
//将二者结合
frame.add(panel);
//设置可见
frame.setVisible(true);
}
}
2、监听事件:监听窗口关闭事件
//监听事件,监听窗口关闭事件
//适配器模式
frame.addWindowListener(new WindowAdapter(){
//窗口点击关闭的时候需要做的事情
@Override
public void windowClosing(WindowEvent e) {
// 结束程序
System.exit(0);
}
});
布局管理器
1、流式布局
import java.awt.*;
//监听事件
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class 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");
//设置为流式布局 -> 默认居中
frame.setLayout(new java.awt.FlowLayout());
//设置大小
frame.setSize(500,500);
//把按钮添加上去
frame.add(button1);
frame.add(button2);
frame.add(button3);
//设置可见
frame.setVisible(true);
//监听事件,监听窗口关闭事件
//适配器模式
frame.addWindowListener(new WindowAdapter(){
//窗口点击关闭的时候需要做的事情
@Override
public void windowClosing(WindowEvent e) {
// 结束程序
System.exit(0);
}
});
}
}
2、东西南北中
import java.awt.*;
public class BorderLayout {
public static void main(String[] args) {
Frame frame = new Frame("BorderLayout");
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, java.awt.BorderLayout.EAST);
frame.add(west, java.awt.BorderLayout.WEST);
frame.add(south, java.awt.BorderLayout.SOUTH);
frame.add(north, java.awt.BorderLayout.NORTH);
frame.add(center, java.awt.BorderLayout.CENTER);
frame.setSize(400,400);
frame.setVisible(true);
}
}
3、表格布局
import java.awt.*;
public class GridLayout {
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");
Button button5 = new Button("button5");
Button button6 = new Button("button6");
//设置表格大小
frame.setLayout(new java.awt.GridLayout(3,2));
//添加到frame中
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.add(button5);
frame.add(button6);
frame.pack(); //Java函数 ——》 自动布局 / 填充
frame.setVisible(true);
}
}
- 作业 写出下列布局:
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.GridLayout;
public class Homework {
public static void main(String[] args) {
// 总 Frame
Frame frame = new Frame();
frame.setBounds(400,300,500,500);
frame.setBackground(Color.MAGENTA);
frame.setLayout(new GridLayout(2,1)); //整体分为上下两块
frame.setVisible(true);
// 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,1)); //下面板的中部,再按表格分
//向上面板添加按钮
p1.add(new Button("East-1"), BorderLayout.EAST);
p1.add(new Button("West-1"), BorderLayout.WEST);
p2.add(new Button("grid-00"));
p2.add(new Button("grid-10"));
p1.add(p2,BorderLayout.CENTER);
//向下面板添加按钮
p3.add(new Button("East-2"), BorderLayout.EAST);
p3.add(new Button("West-2"), BorderLayout.WEST);
p4.add(new Button("grid-00"));
p4.add(new Button("grid-01"));
p4.add(new Button("grid-10"));
p4.add(new Button("grid-11"));
p3.add(p4,BorderLayout.CENTER);
//将上下面板放入frame中
frame.add(p1);
frame.add(p3);
}
}
总 结
1、Frame是一个顶级窗口
2、Panel无法单独显示,必须添加到某个容器中
3、布局管理器:流式、东西南北中、表格
4、大小、定位、颜色背景、可见性、监听
5、写程序前先构思,先构思,先构思,再动手