文章目录
GUI编程(图形用户界面编程!)
观看【狂神说Java】GUI编程入门到游戏实战视频学习笔记
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。
图形用户界面是一种人与计算机通讯执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。
实现功能不能缺少组件,主要包括以下的一些组件:
- 窗口
- 弹窗
- 面板
- 文本框
- 列表框
- 按钮
- 图片
- 监听事件
- 鼠标
- 键盘事件
- …
1. 简介
GUI编程的核心技术:Swing AWT
-
页面不美观
-
需要 jre环境 ---------->不流行的原因
学习的目的:
- 可以写出自己心中的一些小工具;
- 工作可能会遇到维护Swing界面
- 了解MVC架构还有了解监听。
2. AWT(Abstract Windows tools)
2.1 AWT简介
-
包含了很多类和接口!
-
元素:窗口,按钮,文本框
-
java.awt 包
2.1 组件和容器
1. 第一个Frame窗口
代码:
package com.liang.lesson1;
import java.awt.*;
//学习java的第一个界面
//CUI的第一个对象
public class TestFrame {
public static void main(String[] args) {
//界面也是一个对象————>Frame
Frame frame = new Frame("我的第一个java图形界面窗口");
//需要设置可见性
frame.setVisible(true);
//设置窗口大小
frame.setSize(400,400);
//设置窗口背景颜色
frame.setBackground(new Color(205, 45, 114));
//弹出的最初位置
frame.setLocation(200,200);
//设置大小不变
frame.setResizable(false);
}
}
2. 如何弹出多个窗口?
将代码封装!
package com.liang.lesson1;
import java.awt.*;
public class TestFrame2 {
public static void main(String[] args) {
//展示多个窗口
MyFrame myFrame1 = new MyFrame(100,100,300,300,Color.blue);
MyFrame myFrame2 = new MyFrame(400,100,300,300,Color.red);
MyFrame myFrame3 = new MyFrame(100,400,300,300,Color.green);
MyFrame myFrame4 = new MyFrame(400,400,300,300,Color.yellow);
}
}
class MyFrame extends Frame{
static int id = 0;//可能存在多个窗口,我们需要有个计数器
public MyFrame(int x,int y,int w, int h , Color color){
super("MyFrame" + (++id));
setBounds(x,y,w,h);//弹出的出位置和弹窗的大小
setBackground(color);
setVisible(true);
}
}
3. 面板Panel
解决了窗口关闭问题:------>监听事件
package com.liang.lesson1;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//测试面板Panel
public class TestPenal {
public static void main(String[] args) {
Frame frame = new Frame("我喜欢你!");
//布局的概念
Panel panel = new Panel();
//设置布局
frame.setLayout(null);
//设置弹窗的位置和大小(设在中间)
frame.setBounds(500,100,500,500);
//设置窗口颜色
frame.setBackground(new Color(35, 195, 182));
//设置面板大小,相对于frame
panel.setBounds(100,100,300,300);
//设置面板颜色
panel.setBackground(new Color(17, 83, 183));
//添加面板
frame.add(panel);
//设置窗口可见
frame.setVisible(true);
//监听事件,监听窗口关闭事件
//适配器模式
frame.addWindowListener(new WindowAdapter() {
//点击关闭需要做的事情
@Override
public void windowClosing(WindowEvent e) {
//关闭窗口
System.exit(0);
}
});
}
}
2.2. 布局管理器
1. 流式布局
package com.liang.lesson1;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
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(FlowLayout.RIGHT));//布局在右
//设置弹窗的位置和大小(设在中间)
frame.setBounds(500,100,500,500);
//设置窗口颜色
frame.setBackground(new Color(35, 195, 182));
//添加按钮
frame.add(button1);
frame.add(button2);
frame.add(button3);
//监听
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setVisible(true);
}
}
2. 东西南北中
package com.liang.lesson1;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame("东西南北中");
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.setBounds(500,100,500,500);
//设置窗口颜色
frame.setBackground(new Color(35, 80, 195));
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.setVisible(true);
//监听
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
3. 表格布局
package com.liang.lesson1;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame("表格");
Button btn1 = new Button("btn1");
Button btn2 = new Button("btn2");
Button btn3 = new Button("btn3");
Button btn4 = new Button("btn4");
Button btn5 = new Button("btn5");
Button btn6 = new Button("btn6");
//设置弹窗的位置和大小(设在中间)
frame.setBounds(500,100,500,500);
//设置表格--->三行两列
frame.setLayout(new GridLayout(2,3));
frame.add(btn1);
frame.add(btn2);
frame.add(btn3);
frame.add(btn4);
frame.add(btn5);
frame.add(btn6);
frame.setVisible(true);
//监听
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
4. 小测试
用程序设计出以下的菜单模块:
方法:
package com.liang.lesson1;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demon {
public static void main(String[] args) {
//弹出最大的窗口
Frame frame = new Frame("小测试!");
//设置弹窗的位置和大小(设在中间)
frame.setBounds(500,100,600,600);
//设置颜色
frame.setBackground(new Color(19, 233, 225));
//设置可见
frame.setVisible(true);
//表格布局两行一列
frame.setLayout(new GridLayout(2,1));
//设置4两个面板
Panel panel1 = new Panel(new BorderLayout());
Panel panel2 = new Panel(new BorderLayout());
Panel panel3 = new Panel(new GridLayout(2