仅作为笔记
GUI继承体系图Frame创建
public class Test{ public static void main(String[] args){ //新建Frame Frame frame = new Frame("This is frame title"); //设置可见性 frame.setVisible(true); //设置窗口大小 frame.setSize(400,400); //设置背景颜色 //1. 自行指定rgb,从而创建颜色 //2. 使用Color类的静态成员定义的预设方案 //frame.setBackground(new Color(125,125,125));//通过执行rgb值创建颜色方案 frame.setBackground(Color.lightgray); //设置窗口弹出的位置 frame.setLocation(700,700);//指定窗口左上角坐标 //设置大小固定,不可拉伸 frame.setResizeable(false); //监听关闭事件 frame.addwindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); }}
至此,一个Frame就定义完成了:
自定义Frame
在需要定义多个Frame的场景中,单独定义每个Frame的效率将会非常低,因此可以通过继承Frame的方式,自定义创建Frame的方法:
public class MyPanel extends Frame{ static int id = 0;//可能存在多个Frame,设置计数器 public MyFrame() throws Headless Exception{super();}//无参构造器 public MyFrame(String title) throws HeadlessException{}; public MyFrame(int x, int y, int w, int h, Color color){ super("Customized frame" + (++id)); setBackground(color); setBounds(x,y,w,h);//≈setLocation()+setSize() setResizable(false); setVisible(true); }}================================================public class Test02{ public static void main(String[] args){ Frame frame1 = new MyFrame(300,300,200,200,Color.lightGray); Frame frame2 = new MyFrame(500,300,200,200,Color.cyan); }}
Panel
实际上,Frame往往仅作为容器存在,想要绘制的窗口内容一般在Panel中实现。
public class TestPanel{ public static void main(String[] args){ MyFrame myFrame = new MyFrame(300,300,500,500,Color.green); myFrame.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); myFrame.setLayout(null); //设置Frame的布局 Panel panel = new Panel(); //添加Panel panel.setBounds(50,50,200,200); //Panel设置坐标,其坐标是与其所在的Frame的相对坐标 panel.setBackground(Color.magenta); //设置Panel的背景 myFrame.add(panel); //将Panel添加到Frame }}