GUI编程

GUI编程

简介

GUI的核心技术: Swing AWT,界面不美观。需要jre环境

为什么要学习?

  1. 可以写出自己心中想要的小工具

  2. 工作时候可能需要维护到swing界面

  3. 了解MVC架构,了解监听。

AWT

AWT介绍

  • 包含很多类和接口。GUI:图形用户界面编程

  • 元素:窗口,按钮,文本框

  • java.awt

  • image-20220805095512197

组件和容器

Frame:

/GUI的第一个界面
public class TestFrame {
   public static void main(String[] args) {
       //Frame,看源码
      Frame frame = new Frame("我的第一个java图像界面窗口");
      //需要设置可见性
       frame.setVisible(true);
       //设置窗口大小
       frame.setSize(400,400);
       //设置背景颜色
       frame.setBackground(new Color(20, 234, 215));
       //弹出的初始位置
       frame.setLocation(200,200);
       //设置大小固定
       //frame.setResizable(false);
  }
}

image-20220805101015815

问题:窗口无法关闭,停止java程序

多个窗口:

image-20220805102143409

image-20220805102206097

回顾封装。

面板Panel

  • 解决关闭问题

package com.wm.lesson01;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

//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(20, 222, 128));

       //panel 设置坐标,相对于frame
       panel.setBounds(50,50,400,400);
       panel.setBackground(new Color(60, 136, 187));

       //frame.add(panel)
       frame.add(panel);
       frame.setVisible(true);
       //监听事件,监听窗口关闭 System。exit()
       //适配器模式:
       frame.addWindowListener(new WindowAdapter() {
           //窗口关闭需要做的事情
           @Override
           public void windowClosing(WindowEvent e) {
               //结束程序
               System.exit(0);
          }
      });
  }
}

image-20220805104747603

布局管理

  • 流式布局

  • public class TestFlowLayout {
       public static void main(String[] args) {
           Frame frame = new Frame();

           //组件-按钮
           Button button1 = new Button("del");
           Button button2 = new Button("str");
           Button button3 = new Button("s");
           //设置为流式布局
           frame.setLayout(new FlowLayout(FlowLayout.LEFT));
           frame.setSize(200,200);
           //把按钮添加上去
           frame.add(button1);
           frame.add(button2);
           frame.add(button3);

           frame.setVisible(true);
      }
    }

    image-20220805110126789

  • 东西南北中

  • package com.wm.lesson01;

    import java.awt.*;

    public class TestBorderLayout {
       public static void main(String[] args) {
           Frame frame = new Frame("TestBorderLayout");

           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");
    //添加到TestBorderLayout
           frame.add(east,BorderLayout.EAST);
           frame.add(north,BorderLayout.NORTH);
           frame.add(south,BorderLayout.SOUTH);
           frame.add(west,BorderLayout.WEST);
           frame.add(center,BorderLayout.CENTER);

           frame.setSize(200,200);
           frame.setVisible(true);
      }
    }
  • image-20220805111829519

  • 表格布局

  • package com.wm.lesson01;

    import java.awt.*;

    public class TestGridLayout {
       public static void main(String[] args) {
           Frame frame = new Frame();

           Button b1 = new Button("b1");
           Button b2= new Button("b2");
           Button b3 = new Button("b3");
           Button b4 = new Button("b4");
           Button b5 = new Button("b5");

           frame.setLayout(new GridLayout(3,2));
           frame.add(b1);
           frame.add(b2);
           frame.add(b3);
           frame.add(b4);
           frame.add(b5);
           frame.setVisible(true);
      }
    }
  •  

image-20220805112243576

总结:

  1. Frame是一个顶级窗口

  2. Panel无法单独显示,必须添加到某个容器中

  3. 布局管理器

    1. 流式

    1. 东西南北中

    1. 表格

    1. 监听

输入框TextField监听

package com.wm.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.lang.reflect.Field;

public class TestText01 {//执行
   public static void main(String[] args) {
       MyFrame myFrame = new MyFrame();
       myFrame.addWindowListener(new WindowAdapter() {
           @Override
           public void windowClosing(WindowEvent e) {
               System.exit(0);
          }
      });
  }
}
class MyFrame extends Frame{//让自己看到
   public MyFrame(){
       TextField textField = new TextField();
       add(textField);  //frame.add(...)因为继承所以直接使用,把文本框加到窗口中
       //监听这个文本框输入的文字
       MyActionListener2 myActionListener2 =new MyActionListener2();
       //按下enter,触发输入框的事件
       textField.addActionListener(myActionListener2);

       //设置替换编码
       textField.setEchoChar('*');//加密

       setVisible(true);
       pack();
  }
}

class MyActionListener2 implements ActionListener{//获取框内信息

   @Override
   public void actionPerformed(ActionEvent e) {
       TextField textField = (TextField) e.getSource();//获得文本框输入的资源
       System.out.println(textField.getText());//输出文本框内容
       textField.setText("");//让文本框返回空白。
  }

}


posted @ 2022-08-05 17:13  小新新Blog  阅读(245)  评论(0)    收藏  举报