Java-GUI编程

GUI编程

  • 这是什么?
  • 它怎么玩?
  • 我们平时该如何应用?

组件

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

1、简介

GUi 的核心技术 : Swinng , AWT ,学GUI 就是学这两个类。

不常用:因为界面不美观,需要Jre环境!

为什么我们要学习?

  1. 可以写出自己心中想要的一些小工具
  2. 工作时候,也可能需要维护到swing界面,概率极小
  3. 了解MVC架构,了解监听!

2、AWT

2.1、Awt介绍

  1. Awt:抽象窗口工具 ,包含了很多类和接口(GUI:图形用户界面)
  2. 元素:窗口,按钮,文本框 ...
  3. java.awt 包
  4. 组件结构图 Java-GUI编程_第1张图片

2.2、组件和容器

1、Frame

public class TextFrame {
    public static void main(String[] args) {
        //Frame JDk 看源码!
        Frame frame = new Frame("我的第一个窗口");
        //设置可见性
        frame.setVisible(true);
        //设置大小
        frame.setSize(500,500);
        //设置初始位置
        frame.setLocation(200,200);
        //设置背景颜色
        frame.setBackground(new Color(140, 238, 181));
        //设置大小固定,不可拉伸,默认可拉伸
        frame.setResizable(false);
    }
}

问题:发现窗口关闭不了

尝试回顾封装:

public class TextFrame2 {

    public static void main(String[] args) {
        //展示多个窗口
        new MyFrame(100,100,200,200,Color.BLUE);
        new MyFrame(300,100,200,200,Color.cyan);
        new MyFrame(100,300,200,200,Color.darkGray);
        new MyFrame(300,300,200,200,Color.green);


    }
}
//尝试回顾封装:
class MyFrame extends Frame{
    //设置计时器
    static int count = 0;
    public MyFrame(int x,int y,int w,int h,Color color){
        super("MyFrame" + (++count));
        setBounds(x,y,w,h);
        setBackground(color);
        setVisible(true);

    }
}

2、面板(内嵌)

解决了关闭事件!

public class TestPanel {
//panel可以看成一个空间,但是不能单独存在,内嵌于
    public static void main(String[] args) {
        Frame frame = new Frame();
        Panel panel = new Panel();

        //设置布局 ???
        frame.setLayout(null);
        //坐标大小
        frame.setBounds(100,100,500,500);
        frame.setBackground(new Color(64, 133, 69));

        //坐标,相对于frame, 或者说是将要内嵌的组件,其位置的相对的
        panel.setBounds(50,50,100,100);
        panel.setBackground(Color.CYAN);
        //添加组件,panel是组件的一个子类
        frame.add(panel);
        //设置可见性
        frame.setVisible(true);

        //监听事件,监听窗口关闭事件,System.exit(0) 强制退出,0 表示正常退出,1代表异常退出
        //适配器模式: new 需要类的时候,可能需要重写很多方法,可new 其子类,重写需要重写的方法。
        //WindowAdapter 继承 WindowListener
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

3、布局管理器(setLayout)

  • 流式布局

    public class TestFlowLayout {
        //流式布局
        public static void main(String[] args) {
            Frame frame = new Frame();
            frame.setBounds(200,200,300,300);
            //流式布局 ,默认居中
            frame.setLayout(new FlowLayout());
            //frame.setLayout(new FlowLayout(FlowLayout.LEFT));
            //frame.setLayout(new FlowLayout(FlowLayout.RIGHT));
    
            frame.setVisible(true);
            Button button1 = new Button("button1");
            Button button2 = new Button("button2");
            Button button3 = new Button("button3");
            frame.add(button1);
            frame.add(button2);
            frame.add(button3);
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    
        }
    }
    
  • 东西南北中

    public class TestBorderLayout {
        public static void main(String[] args) {
            Frame frame = new Frame();
    
            Button east = new Button("east");
            Button west = new Button("west");
            Button south = new Button("South");
            Button north = new Button("north");
            Button center = new Button("center");
            //BorderLayout 东西南北中布局
            frame.add(east,BorderLayout.EAST);
            frame.add(west,BorderLayout.WEST);
            frame.add(south,BorderLayout.SOUTH);
            frame.add(north,BorderLayout.NORTH);
            frame.add(center,BorderLayout.CENTER);
    
            frame.setSize(300,300);
            frame.setVisible(true);
    
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);            }
            });
    
    
        }
    
    }
    
    
  • 表格布局

public class TestGridLayout {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setLayout(new GridLayout(2,3));
        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.add(btn1);
        frame.add(btn2);
        frame.add(btn3);
        frame.add(btn4);
        frame.add(btn5);
        frame.add(btn6);

        frame.pack(); //java函数,作用自动优化位置
        frame.setVisible(true);
    }
}

  • 布局练习,布局之间的嵌套
  //课堂练习
  public class Test {
      public static void main(String[] args) {
          //总分去思考
          //用容器去分块,容器内可设置新的布局,容器是组件的子类
          //可把容器视为特殊的组件
          Frame frame = new Frame();
          frame.setLayout(new GridLayout(2,1));
          frame.setSize(300,400);
          frame.setLocation(300,300);
          frame.setVisible(true);
         //上
          Panel p1 = new Panel(new BorderLayout());
          p1.add(new Button("btn1"),BorderLayout.EAST);
          p1.add(new Button("btn2"),BorderLayout.WEST);
          Panel p2 = new Panel(new GridLayout(2,1));
          p2.add(new Button("btn3"));
          p2.add(new Button("btn4"));
          p1.add(p2,BorderLayout.CENTER);
  
          //下
          Panel p3 = new Panel(new BorderLayout());
          p3.add(new Button("btn5"),BorderLayout.EAST);
          p3.add(new Button("btn6"),BorderLayout.WEST);
          Panel p4 = new Panel(new GridLayout(2, 2));
          p4.add(new Button("btn7"));
          p4.add(new Button("btn8"));
          p4.add(new Button("btn9"));
          p4.add(new Button("btn10"));
          p3.add(p4,BorderLayout.CENTER);
  
          //总
          frame.add(p1);
          frame.add(p3);
          frame.pack();
      }
  }
  

总结:

  1. Frame 是一个顶级窗口
  2. Panel 无法单独显示,必须添加到某个容器中
  3. 布局管理器
    1. 流式
    2. 东西南北中
    3. 表格

4、事件监听

事件监听:当某个事情发生的时候,干什么?

3、Swing

你可能感兴趣的:(Java-GUI编程)