2.1 第一个Frame窗口
2.1.1 初识容器
2.1.1.1 容器 frame(窗口的主体框架)
package com.muquanyu.lesson01;import java.awt.*;//GUI 第一个界面
public class TestFrame {
public static void main(String[] args) {
//Frame 对象Frame frame = new Frame();//这个东西创建完是在内存里的,然后我们要设置可见性frame.setVisible(true);//设置窗口大小frame.setSize(400,400);//设置背景颜色//Color color = new Color()frame.setBackground(Color.black);//弹出的初始位置frame.setLocation(200,200);//设置大小固定frame.setResizable(false);}
}
这样就能写出你的第一个 窗口程序了。不过呢 ~ 你只 new 了一个 frame 主体,所以 就是个 窗口。。
- 封装普通类方法
package com.muquanyu.lesson01;import java.awt.*;public class TestFrameII {
public static void main(String[] args) {
int x = 100;int y = 200;for(int i = 0;i<10;++i){
new MyFrame().create("你好"+(i+1),x+i*200,200,100,100,Color.black);}System.out.println(new MyFrame().num);}
}
class MyFrame extends Frame{
public static int num = 0;public static boolean create(String title,int x,int y,int height,int width,Color color){
Frame frame = new Frame();if(frame == null){
return false;}frame.setTitle(title);frame.setVisible(true);frame.setSize(width,height);frame.setLocation(x,y);frame.setBackground(color);frame.setResizable(false);num++;return true;};}
2.1.1.2 面板 Panel
相当于 分组框,就是对某个区域进行单独的分组!这个区域有自己的组件,和其它组件基本上是不和其它组件和区域产生关系的。除非你非要 建立 联系!
Panel 必须建立在 frame 主体上!它不能单独存在,所以我才把它叫做分组框。因为它和组件一样 需要建立在 frame上。
- Panel(用来布局窗口内的组件、分组)
package com.muquanyu.lesson01;import java.awt.*;public class TestPanel {
public static void main(String[] args) {
Frame f = new Frame();//布局的概念Panel panel = new Panel();//设置布局f.setLayout(null);//坐标f.setBounds(300,300,500,500);f.setBackground(new Color(73, 173, 53, 255));//panel 也要设置坐标,但它是相对于 framepanel.setBounds(50,50,400,400);panel.setBackground(new Color(128, 36, 36));//添加容器 panelf.add(panel);f.setVisible(true);}
}
- 添加监听事件(监听窗口关闭事件)
f.addWindowListener(new WindowListener() {
@Overridepublic void windowOpened(WindowEvent e) {
}@Overridepublic void windowClosing(WindowEvent e) {
}@Overridepublic void windowClosed(WindowEvent e) {
}@Overridepublic void windowIconified(WindowEvent e) {
}@Overridepublic void windowDeiconified(WindowEvent e) {
}@Overridepublic void windowActivated(WindowEvent e) {
}@Overridepublic void windowDeactivated(WindowEvent e) {
}});
你会发现 frame 这个主体框架 的事件有很多,当你 new 一个匿名内部类的时候。会有大量的方法 自动生成!让你去填写它们的代码。而这些 出现的方法 其实 就是我们一直说的 事件!
但是出现的 事件太多了,我们不需要这么多,比如说我们现在只需要监听窗口关闭的事件,那么我们就只需要关闭的那个方法就行了。
这个时候,我们就需要 用到 “适配器”,即 windowAdapter()
Java 的这个 WindowAdapter 适配器,是 implements WindowListener, WindowStateListener, WindowFocusListener 的,从这里可以看出 它 是一个 帮助 这些接口 实现方法 的子类。那么它的任务就是 帮忙实现方法呗。所以 要实现哪个 就 写哪个。而不需要全写!比如说 我们的 windowClosing 这个关闭事件,我们就只需要 写 这一个方法就行。
f.addWindowListener(new WindowAdapter() {
@Override//这个的意思就是 窗口点击关闭的时候,需要做的事情是什么?public void windowClosing(WindowEvent e) {
super.windowClosing(e);System.exit(0);//需要做的事情是 退出程序!}});
这样我们 就可以在点击关闭的时候,就可以 退出程序了。