一、Frame
package com.massimo.charpter12;
import java.awt.*;
//GUI的第一个界面
public class TestFrame {
public static void main(String[] args) {
//Frame , JDK,看源码
Frame frame = new Frame("我的第一个Java图像界面窗口");
//需要设置可见性
frame.setVisible(true);
//设置窗口大小w , h 默认都为0
frame.setSize(400 , 400);
//设置背景颜色
frame.setBackground(new Color(85 , 150 , 68));
//弹出的初始位置
frame.setLocation(200 , 200);
//设置大小固定,默认是可以改变大小的
frame.setResizable(false);
}
}
效果:
问题:发现窗口关闭不掉,停止Java程序。
二、创建多个Frame窗口
思路:将创建窗口的代码抽取出来,封装到一个类中。
package com.massimo.charpter12;
import java.awt.*;
public class TestFrame2 {
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
这里解决了无法关闭窗口的问题!
package com.massimo.charpter12;
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.setBounds(300 , 300 , 500 , 500);
frame.setBackground(new Color(40 , 160 , 35));
//Panel设置坐标,相对于Frame , 以及背景颜色
panel.setBounds(50 , 50 , 400 , 400);
panel.setBackground(new Color(190 , 15 , 60));
//将panel添加进frame中
frame.add(panel);
frame.setVisible(true);
//监听事件,监听窗口关闭事件 System.exit(0);
//适配器模式:
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
//结束程序
System.exit(0);
}
});
}
}
效果: