Day03(GUI编程起步 AWT( 组件和容器 三种布局管理器))

GUI编程介绍

经常使用组件和用途:java

  • 窗口
  • 弹窗
  • 面板
  • 文本框
  • 列表框
  • 按钮
  • 图片
  • 监听事件
  • 鼠标
  • 键盘事件
  • 外挂 破解工具

1.简介

GUI核心技术:Swing AWT
1.界面不美观
2.须要jre环境web

1.能够写出内心想要的小工具
2.工做时可能要维护Swing界面
3.了解MVC架构,了解监听器编程

2.AWT

2.1AWT介绍

1.包含不少类和接口! GUI:图形 用户 界面编程
2.元素:窗口 按钮 文本框
3.java.awt包架构

2.2组件和容器

2.2.1 第一个Frame
1.一个窗口
import java.awt.*;
//GUI的第一个界面
    public class TestFrame {
    public static void main(String[] args) {
        //Frame.JDK 看源码:按Ctrl再点击类
   Frame frame= new Frame("个人第一个Java图像界面窗口");
      //须要设置可见性
        frame.setVisible(true);
        //设置窗口大小
        frame.setSize(400,400);
        //设置背景颜色 Color类
        frame.setBackground(Color.yellow);//frame.setBackground(new Color(1,1,1)); 也能够经过RGB输入颜色
        //弹出初始位置
        frame.setLocation(200,200);
        //设置大小固定
        frame.setResizable(false);
    }
}

界面为:在这里插入图片描述
出现问题:窗口关不掉!!!!ide

2.多个窗口——封装原来的单个窗口并调用
public class TestFrame2 {
    public static void main(String[] args) {
        //展现多个窗口 new
        MyFrame myFrame1=new MyFrame(100,100,200,200,Color.BLUE);
        MyFrame myFrame2= new MyFrame(300,100,200,200,Color.BLACK);
        MyFrame myFrame3= new MyFrame(100,300,200,200,Color.GREEN);
        MyFrame myFrame4= new MyFrame(300,300,200,200,Color.DARK_GRAY);
    }
}
class MyFrame extends Frame{
    static int id=0;//可能存在多个窗口,咱们须要一个计数器

    public MyFrame(int x,int y,int w,int h,Color color){
        super(("Myframe"+(++id)));//每多一个窗口,id计数加一
        setBounds(x,y,w,h);     //位置和大小
        setVisible(true);
        setBackground(color);

    }
}

界面为:在这里插入图片描述svg

2.2.2 面板Panel

用适配器模式添加监听事件,解决了窗口关闭的问题。函数

//Panel 能够当作一个空间 但不能单独存在 要放在Frame上
public class TestPanel {
    public static void main(String[] args) {
        Frame frame=new Frame();
        //布局的概念 Layout
      Panel panel= new Panel();

      //设置布局
        frame.setLayout(null);
        //坐标
        frame.setBounds(300,300,500,500);
        frame.setBackground(new Color(60, 100, 25));


        //panel设置坐标 相对于fame
        panel.setBounds(50,50,400,400);
        panel.setBackground(new Color(75, 177, 120));

        //frame.add
        frame.add(panel);
        frame.setVisible(true);

        //监听事件 监听窗口关闭事件 System.exit(0)

     /* 普通作法:须要重写所有方法 麻烦 frame.addWindowListener(new WindowListener() { @Override public void windowOpened(WindowEvent e) { } @Override public void windowClosing(WindowEvent e) { } @Override public void windowClosed(WindowEvent e) { } @Override public void windowIconified(WindowEvent e) { } @Override public void windowDeiconified(WindowEvent e) { } @Override public void windowActivated(WindowEvent e) { } @Override public void windowDeactivated(WindowEvent e) { } }); */
        //适配器模式 不须要每一个都重写 不须要写的继承父类中默认方法
        frame.addWindowListener(new WindowAdapter() {
            //窗口关闭时要作的事
            @Override
            public void windowClosing(WindowEvent e) {
                //结束程序
                System.exit(0);
            }
        });}

}
2.2.2 布局管理器
  • 流式布局
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.setSize(200,200);
    
    //把按钮添加上去
    frame.add(button1);
    frame.add(button2);
    frame.add(button3);
    
    frame.setVisible(true);
  • 东西南北中
public class TestBorderLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("Test BorderLayout");

        Button east = new Button("East");
        Button west = new Button("West");
        Button north = new Button("North");
        Button south = new Button("South");
        Button center = new Button("Center");
//放置按钮 不能自动填充,要挨个指定位置
        frame.add(east,BorderLayout.EAST);
        frame.add(west,BorderLayout.WEST);
        frame.add(north,BorderLayout.NORTH);
        frame.add(south,BorderLayout.SOUTH);
        frame.add(center,BorderLayout.CENTER);

       frame.setSize(200,200);
       frame.setVisible(true);
    }
}
  • 表格布局
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.setLayout(new GridLayout(3,2));
        frame.add(btn1);
        frame.add(btn2);
        frame.add(btn3);
        frame.add(btn4);
        frame.add(btn5);
        frame.add(btn6);

        
        frame.pack();//Java函数 自动使用优化布局
        frame.setVisible(true);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

课后练习:

题目:实现如图架构
在这里插入图片描述工具

public static void main(String[] args) {
    Frame frame = new Frame();
    frame.setSize(400,300);
    frame.setBackground(new Color(4,56,88));
    Panel panel1 = new Panel();
    Panel panel2 = new Panel();
    Panel panel3 = new Panel();
    Panel panel4 = new Panel();
    
    panel1.setLayout(new BorderLayout());
    panel1.add(new Button("East-1"),BorderLayout.EAST);
    panel1.add(new Button("West-1"),BorderLayout.WEST);
    panel1.add(panel2,BorderLayout.CENTER);
    
    panel2.setLayout(new GridLayout(2,1));
    panel2.add(new Button("Center-1"));
    panel2.add(new Button("Center-2"));

    panel3.setLayout(new BorderLayout());
    panel3.add(new Button("East-2"),BorderLayout.EAST);
    panel3.add(new Button("West-2"),BorderLayout.WEST);
    panel3.add(panel4,BorderLayout.CENTER);
    
    panel4.setLayout(new GridLayout(2,2));
    panel4.add(new Button("Center-5"));
    panel4.add(new Button("Center-6"));
    panel4.add(new Button("Center-7"));
    panel4.add(new Button("Center-8"));
    
  frame.setLayout(new GridLayout(2,1));
  frame.add(panel1);
  frame.add(panel3);
  
    frame.pack();
    frame.setVisible(true);
}

总结:

1.Frame是一个顶级窗口布局

2.Panel没法单独显示,必须添加到某个容器中
3.布局管理器优化

  • 流式
  • 东西南北中
  • 表格