GUI编程(图形化页面编程)
GUI的核心技术:Swing AWT 类
GUI为什么让淘汰了?
- 界面不美观
- 需要jre环境(不会因为几兆的游戏,去下载几百兆的环境)
为什么我们要学习?
- 可以写出自己心中的小工具
- 了解监听
AWT和Swing的区别
AWT不需要容器,它本身就是容器。而Swing需要容器getContentPane();
AWT
这个包含了很多接口和类,他主要的作用是提供一个组件工具。
组件包括:容器、按钮、文本框等
Frame容器
第一个java页面
import java.awt.*;
public class OnePage {
public static void main(String[] args) {
//通过new对象,在创建一个页面
Frame frame = new Frame("我的第一个java页面");
//需要设置可见性,并且设置w,h
frame.setVisible(true);
frame.setSize(400,400);
//设置页面的颜色
frame.setBackground(new Color(112, 172, 29));
//设置弹出位置的初始大小
frame.setLocation(200,200);
//设置窗口大小是否可变
frame.setResizable(false);
}
}
通过对页面属性的封装,来达成创建页面的效果
import java.awt.*;
//封装一个页面的设置属性
public class MyFrame extends Frame {
public MyFrame(int x,int y,int w,int h,Color color){
setBackground(color);//设置页面颜色
setBounds(x,y,w,h);//设置中心坐标和宽高
setVisible(true);//设置可见性
}
}
Panel面板
面板是放在容器里面的,它相当于对一个容器的划分。
import java.awt.*;
public class Panel1 {
//创建一个画板
public static void main(String[] args) {
MyFrame myFrame = new MyFrame(500, 500, 300, 300, Color.pink);
MyPanel myPanel = new MyPanel(50, 50, 100, 100, Color.magenta);
//设置布局
myFrame.setLayout(null);
myFrame.add(myPanel);
}
}
按钮布局结构
流式布局
import java.awt.*;
public class FlowLayout {
public static void main(String[] args) {
//创建一个容器
MyFrame myFrame = new MyFrame(200, 200, 200, 200, Color.PINK);
//创建按钮
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
//在容器中添加按钮
myFrame.add(button1);
myFrame.add(button2);
myFrame.add(button3);
//设置按钮在容器中的布局
myFrame.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
}
}
东西南北中布局
import java.awt.*;
public class DXNBZLayout {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame(200, 200, 200, 200, Color.PINK);
//设置五个按钮
Button east = new Button("east");
Button south = new Button("south");
Button west = new Button("west");
Button north = new Button("north");
Button center = new Button("center");
//设置组件的东南西北中布局
myFrame.add(east,BorderLayout.EAST);
myFrame.add(south,BorderLayout.SOUTH);
myFrame.add(west,BorderLayout.WEST);
myFrame.add(north,BorderLayout.NORTH);
myFrame.add(center,BorderLayout.CENTER);
}
}
网格布局
import java.awt.*;
public class FormLayout {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame(200, 200, 200, 200, Color.PINK);
//设置六个按钮
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");
//设置网格布局
myFrame.setLayout(new GridLayout(2,3));
//添加按钮
myFrame.add(button1);
myFrame.add(button2);
myFrame.add(button3);
myFrame.add(button4);
myFrame.add(button5);
myFrame.add(button6);
}
}
事件监听
当某个事情发生时,下一步需要干什么?
把事件监听抽象成一个类
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyActionListener {
public MyActionListener(Button button) {
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("000");
}
});
}
}
import java.awt.*;
public class MatterMonitor {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame(300, 300, 300, 300, Color.pink);
//组件自适应窗口
myFrame.pack();
//创建一个按钮
Button button = new Button("output:000");
myFrame.add(button);
new MyAddWindowListener(myFrame);
new MyActionListener(button);
}
}
文本框事件监听
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestBox {
public static void main(String[] args) {
MyTextBox myTextBox = new MyTextBox();
new MyAddWindowListener(myTextBox);
}