介绍

  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. ContosoRetailDW数据库恢复问题

    https://www.microsoft.com/en-us/download/details.aspx?id=18279 下载 ContosoBIdemoBAK.exe和ContosoBIdemo ...

  2. 三菱电梯综合监控系统适配 lonele.exe 由 20180418 降级至 20150930 而调整相应的 msde2000 数据库

    win10 x86 系统下程序文件的部分目录可能是 电梯综合监控系统 C:\PROGRAM FILES\上海三菱电梯有限公司 ├─电梯综合监控系统 │ │ AxInterop.BRTMFSHX.dll ...

  3. Servlet内存马

    emmm.....本篇写的还不是很完善,学着后边的忘着后边的,后续边学边完善吧........ 概述 如果你不了解IDEA调试Tomcat和Tomcat各组件概念可以参考我的博客:JAVA WEB环境 ...

  4. WebSocket事件

    优点 双通信,减少延迟 四个主要的Web Socket API事件: ·打开 onopen 当在客户端和服务器建立连接,就会从Web Socket实例触发open事件.它被称为客户端和服务器之间的初始 ...

  5. uniapp+django 新手学习步骤记录 (1)

    第一次学习uniapp和django,找了一个入门教程遇到坑,记录一下. 1.Django项目和uni-app项目的创建及项目文件讲解_慕容星言的博客-CSDN博客 (1)注意同时安装了python2 ...

  6. 【COS 加码福利】COS 用户实践有奖征文,等你来投稿!

    COS用户实践征文活动火热进行中,本次征集主题为:如何在生态场景下使用 COS? 优质文章将有机会被编入腾讯云官方文档库,供广大用户学习参考.更有多重好礼等你来拿,速来围观投稿吧! 投稿说明: 1.投 ...

  7. 技术实践|Hive数据迁移干货分享

    导语 Hive是基于Hadoop构建的一套数据仓库分析系统,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能.它的优点是可以通过类SQL语句快速实现简单的MapReduce统计,不 ...

  8. shell内置字符串替换

    shell变量赋值语法: 使用规则 解释单引号 所见即所得,即输出时会将单引号内的所有內容都原样输出,或者描述为单引号里面看到的是什么就会输出什么,这称为强引用双引号 (默认) 输出双引号内的所有内容 ...

  9. GNU Make中CPPFLAGS和CXXFLAGS之间的区别

    GNU Make 是一个流行的构建工具,用于编译和链接源代码.在 GNU Make 中,CPPFLAGS 和 CXXFLAGS 都是用于指定编译器选项的变量.它们之间的主要区别在于它们分别适用于 C ...

  10. 开源即时通讯IM框架MobileIMSDK的H5端技术概览

    一.基本介绍 MobileIMSDK的H5端是一套纯JS编写的基于标准WebSocket的即时通讯库: 1)超轻量级.极少依赖: 2)纯JS编写.高度提炼,简单易用: 3)基于标准WebSocket协 ...