介绍

  1. 包含了很多类和接口

  2. 元素:窗口、按钮、文本框

  3. java.awt

Frame

就是一个窗口

实现
package com.yeyue.lesson01;

import java.awt.*;

public class TestFrame2 {
   public static void main(String[] args) {

       //展示多个窗口
       MyFrame myFrame = 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.yeyue.lesson01;

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,161,35));

       //Panel 设置坐标,相当于frame
       panel.setBounds(50,50,400,400);
       panel.setBackground(new Color(159, 159, 186));

       //frame.add(Panel)
       frame.add(panel);

       frame.setVisible(true);

       //监听事件,监听窗口关闭事件 system.exit(0)
       //适配器模式
       frame.addWindowListener(new WindowAdapter() {
           //窗口点击关闭的时候需要做的事情
           @Override
           public void windowClosing(WindowEvent e) {
               //结束程序
               System.exit(0);

          }
      });

  }
}
结果展示

布局管理器

流式布局Flow
实现
package com.yeyue.lesson01;

import java.awt.*;

public class TestFlowLayout {
   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.setLayout(new FlowLayout(FlowLayout.RIGHT));


       frame.setSize(200,200);

       //把按钮加上去
       frame.add(button1);
       frame.add(button2);
       frame.add(button3);

       frame.setVisible(true);
  }
}
结果展示

东西南北中Border
实现
package com.yeyue.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 south = new Button("South");
       Button north = new Button("North");
       Button center = new Button("Center");

       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(200,200);

       frame.setVisible(true);
  }
}
结果展示

表格布局Grid
实现
package com.yeyue.lesson01;

import java.awt.*;

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

       //组件按钮
       Button bth1 = new Button("bth1");
       Button bth2 = new Button("bth2");
       Button bth3 = new Button("bth3");
       Button bth4 = new Button("bth4");
       Button bth5 = new Button("bth5");
       Button bth6 = new Button("bth6");

       frame.setLayout(new GridLayout(3,2));

       frame.add(bth1);
       frame.add(bth2);
       frame.add(bth3);
       frame.add(bth4);
       frame.add(bth5);
       frame.add(bth6);

       frame.pack(); //java 函数
       frame.setSize(200,200);

       frame.setVisible(true);
  }
}
结果展示

布局管理器综合练习

先分析过程,然后写代码逐步实现

实现
package com.yeyue.lesson01;

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

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

       frame.setSize(400,300);
       frame.setLocation(300,400);
       frame.setBackground(Color.black);
       frame.setVisible(true);
       frame.setLayout(new GridLayout(2,1));

       Panel p1 = new Panel(new BorderLayout());
       Panel p2 = new Panel(new GridLayout(2,1));
       Panel p3 = new Panel(new BorderLayout());
       Panel p4 = new Panel(new GridLayout(2,2));

       p1.add(new Button("East-1"),BorderLayout.EAST);
       p1.add(new Button("West-1"),BorderLayout.WEST);
       p2.add(new Button("p2-btn-1"));
       p2.add(new Button("p2-btn-2"));
       p1.add(p2,BorderLayout.CENTER);

       p3.add(new Button("East-2"),BorderLayout.EAST);
       p3.add(new Button("West-2"),BorderLayout.WEST);
       for (int i = 0; i < 4; i++) {
           p4.add(new Button("for-" + i));
      }
       p3.add(p4,BorderLayout.CENTER);

       frame.add(p1);
       frame.add(p3);


       frame.addWindowListener(new WindowAdapter() {
           @Override
           public void windowClosing(WindowEvent e) {
               System.exit(0);
          }
      });

  }
}
结果展示

事件监听

实例
package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestActionEvent {
   public static void main(String[] args) {
       //按下按钮 ,触发一些事件
       Frame frame = new Frame();
       Button button = new Button();

       //因为,addActionListener() 需要一个ActionListener,所以我们构建一个ActionListener
       MyActionListener myActionListener = new MyActionListener();
       button.addActionListener(myActionListener);

       frame.add(button,BorderLayout.CENTER);
       frame.pack();
       frame.setVisible(true);

       windowsClose(frame);


  }
   public static void windowsClose(Frame frame){
       frame.addWindowListener(new WindowAdapter() {
           @Override
           public void windowClosing(WindowEvent e) {
               System.exit(0);
          }
      });
  }
}

//事件监听
class MyActionListener implements ActionListener{
   @Override
   public void actionPerformed(ActionEvent e) {
       System.out.println("aaa");
  }
}
多个按钮共享一个事件
package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestActionEvent2 {
   public static void main(String[] args) {
       //两个按钮,实现同一个监听
       //开始 结束
       Frame frame = new Frame("开始-停止");

       Button button1 = new Button("start");
       Button button2 = new Button("stop");

       //可以显示的定义触发会返回的命令,如果不显示定义,则会走默认值
       //可以多个按钮只写一个监听类
       button1.setActionCommand("button1-start");
       button2.setActionCommand("button2-stop");

       MyMonitor myMonitor = new MyMonitor();

       button1.addActionListener(myMonitor);
       button2.addActionListener(myMonitor);

       frame.add(button1,BorderLayout.NORTH);
       frame.add(button2,BorderLayout.SOUTH);

       frame.pack();
       frame.setVisible(true);

       windowsClose(frame);
  }
   public static void windowsClose(Frame frame){
       frame.addWindowListener(new WindowAdapter() {
           @Override
           public void windowClosing(WindowEvent e) {
               System.exit(0);
          }
      });
  }
}

class MyMonitor implements ActionListener{
   @Override
   public void actionPerformed(ActionEvent e) {
       //
       System.out.println("按钮被点击了:msg=> " + e.getActionCommand());

  }
}

输入框TextField

package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestText {
   public static void main(String[] args) {
       //启动
       new MyFrame();
  }
}

class MyFrame extends Frame{
   public MyFrame(){
       TextField textField = new TextField();
       add(textField);

       //监听这个文本框输入的文字
       MyActionListener2 myActionListener2 = new MyActionListener2();
       //按下 enter 就会触发这个输入框的事件
       textField.addActionListener(myActionListener2);

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

       setVisible(true);
       pack();


  }

}

class MyActionListener2 implements ActionListener{
   @Override
   public void actionPerformed(ActionEvent e) {
       TextField field = (TextField) e.getSource(); //获取一些资源,返回的一个对象
       System.out.println(field.getText()); //获取文本框中输入的文本
       field.setText(""); //null ""
  }
}

简易计算器,组合+内部类

oop原则:组合大于继承

package com.yeyue.lesson02;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//简易计算器
public class TestCacu {
   public static void main(String[] args) {
       new Calculator();
  }
}

//计算器类
class Calculator extends Frame{
   public Calculator(){
       //三个文本框
       TextField num1 = new TextField(10);//字符数
       TextField num2 = new TextField(10);//字符数
       TextField num3 = new TextField(20);//字符数

       //一个按钮
       Button button = new Button("=");
       button.addActionListener(new MyCalculatorListener(num1,num2,num3));

       //一个标签
       Label label = new Label("+");

       //布局
       setLayout(new FlowLayout());

       add(num1);
       add(label);
       add(num2);
       add(button);
       add(num3);

       pack();
       setVisible(true);
  }
}

//监听器类
class MyCalculatorListener implements ActionListener {
   //获取三个变量
   private TextField num1,num2,num3;

   public MyCalculatorListener(TextField num1,TextField num2,TextField num3){
       this.num1 = num1;
       this.num2 = num2;
       this.num3 = num3;
  }

   @Override
   public void actionPerformed(ActionEvent e) {
       //1. 获得加数和被加数
       int n1 = Integer.parseInt(num1.getText());
       int n2 = Integer.parseInt(num2.getText());

       //2. 将这个这个值 + 法 运算后,放到第三个框
       num3.setText("" + (n1+n2));

       //3. 清除前两个框
       num1.setText("");
       num2.setText("");

  }
}
完全改造为面向对象写法
package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//简易计算器
public class TestCacu {
   public static void main(String[] args) {
       new Calculator().loadFrame();
  }
}

//计算器类
class Calculator extends Frame {

   //属性
   TextField num1, num2, num3;

   //方法
   public void loadFrame(){

       num1 = new TextField(10);//字符数
       num2 = new TextField(10);//字符数
       num3 = new TextField(20);//字符数
       Label label = new Label("+");
       Button button = new Button("=");

       button.addActionListener(new MyCalculatorListener(this));

       setLayout(new FlowLayout());
       add(num1);
       add(label);
       add(num2);
       add(button);
       add(num3);

       pack();
       setVisible(true);
  }
}

//监听器类
class MyCalculatorListener implements ActionListener {
   //获取计算器这个对象,在一个类中组合另一个类
   Calculator calculator = null;

   public MyCalculatorListener(Calculator calculator){
       this.calculator = calculator;
  }

   @Override
   public void actionPerformed(ActionEvent e) {

       int n1 = Integer.parseInt(calculator.num1.getText());
       int n2 = Integer.parseInt(calculator.num2.getText());

       calculator.num3.setText(""+(n1+n2));
       calculator.num1.setText("");
       calculator.num2.setText("");

  }
}
内部类
  • 更好的包装

package com.yeyue.lesson02;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//简易计算器
public class TestCacu {
   public static void main(String[] args) {
       new Calculator().loadFrame();
  }
}

//计算器类
class Calculator extends Frame {

   //属性
   TextField num1, num2, num3;

   //方法
   public void loadFrame() {

       num1 = new TextField(10);//字符数
       num2 = new TextField(10);//字符数
       num3 = new TextField(20);//字符数
       Label label = new Label("+");
       Button button = new Button("=");

       button.addActionListener(new MyCalculatorListener());

       setLayout(new FlowLayout());
       add(num1);
       add(label);
       add(num2);
       add(button);
       add(num3);

       pack();
       setVisible(true);
  }

   //监听器类
   //内部类最大的好处就是可以畅通无阻的访问外部的属性和方法
   private class MyCalculatorListener implements ActionListener {
       //获取计算器这个对象,在一个类中组合另一个类
       Calculator calculator = null;

       @Override
       public void actionPerformed(ActionEvent e) {

           int n1 = Integer.parseInt(num1.getText());
           int n2 = Integer.parseInt(num2.getText());

           num3.setText("" + (n1 + n2));
           num1.setText("");
           num2.setText("");

      }
  }
}

画笔

package com.yeyue.lesson03;

import java.awt.*;

public class TestPaint {
   public static void main(String[] args) {
       new MyPaint().loadFrame();
  }
}

class MyPaint extends Frame{

   public void loadFrame(){
       setBounds(200,200,600,500);
       setVisible(true);
  }

   @Override
   public void paint(Graphics g) {
       //画笔,需要有颜色,可以画画
       g.setColor(Color.red);
       g.drawOval(100,100,100,100);
       g.fillOval(200,200,100,100);  //实心的圆

       g.setColor(Color.GREEN);
       g.drawRect(150,200,200,200);
       g.fillRect(300,10,200,200);

       //养成习惯,画笔用完,将他还原到最初的颜色
  }
}

鼠标监听

目的:实现鼠标画画

package com.yeyue.lesson03;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class TestMouseListener {
   public static void main(String[] args) {
       new MyFrame("画图");
  }
}

class MyFrame extends Frame{
   //需要监听鼠标当前的位置,需要集合来存储这个点
   ArrayList points;

   public MyFrame(String title){
       super(title);
       setBounds(200,200,400,400);

       //存鼠标的点
       points = new ArrayList<>();

       //鼠标监听器,正对这个窗口
       this.addMouseListener(new MyMouseListener());

       setVisible(true);
  }

   @Override
   public void paint(Graphics g) {
       //画画 监听鼠标的事件
       Iterator iterator = points.iterator();
       while (iterator.hasNext()){
           Point point = (Point) iterator.next();
           g.setColor(Color.blue);
           g.fillOval(point.x,point.y,10,10);
      }

  }

   //添加一个点到界面上
   public void addPaint(Point point){
       points.add(point);
  }

   //适配模式
   private class MyMouseListener extends MouseAdapter{
       @Override
       public void mousePressed(MouseEvent e) {
           MyFrame frame = (MyFrame) e.getSource();
           //这个我们点击的时候就会在界面上产生一个点
           //这个点就是鼠标的点
           frame.addPaint(new Point(e.getX(),e.getY())); ;

           //每次点击鼠标都要重新画一遍
           frame.repaint(); //刷新
      }
  }
}

窗口监听

package com.yeyue.lesson03;

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

public class TestWindow {
   public static void main(String[] args) {
       new WindowFrame();
  }
}

class WindowFrame extends Frame{
   public WindowFrame(){
       setBackground(Color.blue);
       setBounds(100,100,200,200);
       setVisible(true);
       //addWindowListener(new MyWindowListener());
       this.addWindowListener(
               new WindowAdapter() {
                   //关闭窗口
                   @Override
                   public void windowClosing(WindowEvent e) {
                       System.out.println("windowClosing");
                       System.exit(0);
                  }

                   //激活窗口
                   @Override
                   public void windowActivated(WindowEvent e) {
                       WindowFrame source = (WindowFrame) e.getSource();
                       source.setTitle("被激活了");
                       System.out.println("windowActivated");
                  }

              }
      );

  }
}

键盘监听

package com.yeyue.lesson03;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class TestKeyListener {
   public static void main(String[] args) {
       new KeyFrame();
  }
}

class KeyFrame extends Frame{
   public KeyFrame(){
       setBounds(1,2,300,400);
       setVisible(true);

       this.addKeyListener(new KeyAdapter(){
           //键盘按下
           @Override
           public void keyPressed(KeyEvent e) {
               //获得键盘下的键是哪个,当前的码
               int keyCode = e.getKeyCode(); //不需要记录这个值,直接使用静态属性
               System.out.println(keyCode);
               if(keyCode == KeyEvent.VK_UP){
                   System.out.println("你按下了上键");
              }
               //根据按下不同操作,产生不同的结果
          }
      });
  }
}

GUI编程之AWT的更多相关文章

  1. java-GUI编程之AWT组件

    AWT中常用组件 基本组件 组件名 功能 Button Button Canvas 用于绘图的画布 Checkbox 复选框组件(也可当做单选框组件使用) CheckboxGroup 用于将多个Che ...

  2. pytho GUI编程之Tkinter

    摘录 python核心编程s GUI(Graphical User Interface)图形用户界面. Tcl.Tk和Tkinter Tkinter是python的默认GUI库.它基于Tk工具包,该工 ...

  3. Python GUI编程之Tkinter

    GUI编程Tkinter Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI ...

  4. Python GUI编程之WxPython

    https://en.wikipedia.org/wiki/WxPython 官网: Overview of wxPython: https://wxpython.org/pages/overview ...

  5. C++混合编程之idlcpp教程Python篇(7)

    上一篇在这 C++混合编程之idlcpp教程Python篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与PythonTutorial4工程相似,工程PythonTutorial5中,同 ...

  6. C++混合编程之idlcpp教程Lua篇(7)

    上一篇在这 C++混合编程之idlcpp教程Lua篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与LuaTutorial4工程相似,工程LuaTutorial5中,同样加入了四个文件: ...

  7. QT核心编程之Qt线程 (c)

    QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类 ...

  8. Linux应用编程之lseek详解

    Linux应用编程之lseek详解 1.lseek函数介绍 (1).文件指针:当我们要对一个文件进行读写时,一定要先打开这个文件,所以我们读写的所有文件都是动态文件.动态文件在内存中的形态就是文件流的 ...

  9. 网络编程之socket

    网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例 ...

  10. C++混合编程之idlcpp教程Python篇(9)

    上一篇在这 C++混合编程之idlcpp教程Python篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程PythonTutorial7中除了四个文件PythonTu ...

随机推荐

  1. word 文档签章控件生成的签章批量删除

    某个签章工具的word插件缺少批量插入签章的功能.同时,发现在投标工具中可以使用导出生成pdf时批量签章的功能.现在需要移除先前手动操作生成的多个签章,有如下发现-- 1.对少量签章,可以先选中签章右 ...

  2. MySQL原理简介—11.优化案例介绍

    大纲 1.禁止或改写SQL避免自动半连接优化 2.指定索引避免按聚簇索引全表扫描大表 3.按聚簇索引扫描小表减少回表次数 4.避免产生长事务长时间执行 1.禁止或改写SQL避免自动半连接优化 (1)业 ...

  3. Java日志手机号脱敏工具类

    背景 在开发过程中,很容易将用户敏感信息,例如手机号码.身份证等,打印在日志平台.为了保护用户数据,又不影响日志的打印,需要将日志中的敏感信息进行脱敏. 效果 没看明白,强烈建议 pull项目,执行一 ...

  4. ZCMU-1111

    与背包和动态规划有关(我认为) 采用dp数组存放吃掉i千克食物要用掉的钱 dp最开始要尽量的大方便过程中判断和最后的输出判断 实时更新dp,保留最小的钱 以前不知道的 printf函数可以这样用 fi ...

  5. less 动态样式语言

    1.less的介绍 Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展 官方文档 2.less需要编译才能被浏览器解析 浏览器 ...

  6. Fiddler对手机APP进行抓包

    1.下载安装Fiddler 2.打开Fiddler菜单项Tools-> Options->HTTPS 勾选CaptureHTTPS CONNECTs,点击Actions, 勾选Decryp ...

  7. Dapr-6: Dapr 状态管理构建块

    第 6 章 Dapr 状态管理构建块 The Dapr state management building block | Microsoft Docs 分布式应用程序由一组独立的服务构成.尽管每个服 ...

  8. [python]邮件发送注意事项

    邮件格式 关于发信,需要遵循国际发信协议要求[4],例如RFC5322协议,避免因为格式不合法,导致被收信服务器拒收. 在二零二三年以前,在开发Python的邮箱发信接口时,对邮箱格式要求不高,主要还 ...

  9. WPS在ArchLinux常见问题

    问题简述wps在aur源上有包,直接下载安装即可,但是通过包管理器安装的wps会出现一些奇怪的问题,我遇到的有两个: wps在打开时提示缺少字体wps word不能导出pdf文档,同时wps pdf也 ...

  10. JSchException: Algorithm negotiation fail问题解决之路

    最近一个需求用到了SFTP上传功能,同事之前已经封装好了SFTP工具类,用的是JSch,本着不要重复造轮子的想法,就直接拿来用了.交代下环境,JDK为1.7,JSch版本为0.1.51.自测通过.测试 ...