java 中编写 GUI 有两中工具包,分别为 AWT、Swing。

Swing 是 AWT 的拓展,Swing 具有比 AWT 丰富的组件和方法。

AWT 和 Swing 都能跨平台使用;AWT 会随着不同的系统平台,UI 样式会有所变化,Swing 则不会,设计完毕后在所有平台下样式一致。

  1. import java.awt.*;
  2. import javax.swing.*;

一个 awt 示例

下面是一个窗口示例

  1. import java.awt.*;
  2. public class MyFrame extends Frame {
  3. public MyFrame(){
  4. super("测试");
  5. setSize(400,200);
  6. setVisible(true);
  7. }
  8. public static void Main(String args[]){
  9. new MyFrame();
  10. }
  11. }



创建一个窗口,要继承 Frame,同时会继承 Frame 中的一些方法;

Frame 中:

  • super 方法可以设置窗口标题;
  • setSize 设置窗口大小,(width,hight)
  • setVisible 设置是否显示窗口,true 显示,false 隐藏

setLayout(new FlowLayout());用于设置窗口布局;

add(组件); 用于向窗口添加组件,例如按钮等。

我们来向窗口添加组件

  1. import java.awt.*;
  2. public class MyFrame extends Frame {
  3. public MyFrame(){
  4. super("测试");
  5. setLayout(new FlowLayout());
  6. Button btn=new Button("Button");
  7. Font f=new Font("宋体",Font.BOLD,28);
  8. btn.setFont(f);
  9. add(btn);
  10. setSize(400,200);
  11. setVisible(true);
  12. }

在 main 方法中启动窗口

  1. public static void main(String args[]){
  2. new MyFrame();
  3. }

效果

事件

java 中,事件分为三个方面描述,

事件源:发生事件的对象

事件处理:委托事件处理模型

事件监听者:负责处理事件

首先B监听A,设置监听的内容,并设置响应内容。

一旦A本身的状态改变,就触发C;

C执行D

妈妈跟儿子说,你作业做完了,妈妈就让爸爸就给你削个苹果吃。

妈妈:事件监控者

儿子:事件源

动作:做完作业

事件:爸爸削个苹果给儿子

妈妈监控儿子,监控是否完成作业。设置作业完成后,触发事件:削苹果;

儿子做完作业,状态变更,触发事件;事件开始执行。

简单来说 B 告诉 A ,如果 A 怎么样了,就去做一件事情C。

实现事件流程

我们继续利用上面的窗口,实现按钮点击时,改变窗口背景颜色。

实现一个事件

引入

  1. import java.awt.event.ActionListener;

实现接口

  1. class Test implements ActionListener{
  2. public void actionPerformed(ActionEvent actionEvent) {
  3. System.out.println("执行工作");
  4. }

将事件注册到控件上

  1. package com.company;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. public class MyFrame extends Frame implements ActionListener {
  6. public MyFrame(){
  7. super("测试");
  8. setLayout(new FlowLayout());
  9. Button btn=new Button("Button");
  10. Font f=new Font("宋体",Font.BOLD,28);
  11. btn.setFont(f);
  12. btn.addActionListener(this::actionPerformed);
  13. add(btn);
  14. setSize(400,200);
  15. setVisible(true);
  16. }
  17. public void actionPerformed(ActionEvent actionEvent) {
  18. System.out.println("执行工作");
  19. setBackground(Color.BLUE);
  20. }
  21. }

按钮有个事件监听器 addActionListener,我们将要执行的工作 actionPerformed 绑定进去。

当条件发生时,就会触发此工作。

妈耶,我都不知道自己在说啥了。

C# 中,事件没有那么麻烦,也不需要这么BB。。。

另外, actionEvent ,有两个常用方法

  1. actionEvent.getActionCommand(); // 获取对象名称
  2. actionEvent.getSource()(); // 获取源对象

布局

AWT 中,主要有 6 中布局方式。

  • FlowLayout 流式布局

    默认布局,控件从上到下,从左到右地排序。
  • BorderLayout 边缘布局

    自动停靠窗体边缘,并且长宽随着窗体的变化。

  • GridLayout 网格布局

    将容器分成若干行和若干列。
  • CradLayout 卡片布局

    像扑克牌一样,每张牌是一个控件,多个控件叠加起来,每次只能查看一个。
  • GridBagLayout 网格块布局
  • null 采用坐标定位布局

创建一个窗体,并设置流式布局

  1. public class MyFrame extends Frame {
  2. public MyFrame(){
  3. super("测试");
  4. setLayout(new FlowLayout());
  5. }
  6. }

继承 Frame 的窗体中,使用 setLayout方法 可以设置布局。

组件方法

如图是 GUI 控件中常用的控件关系继承图。

组件分为容器(Container)和控件。

容器又分为窗体(Window)和面板(Panel)。

Component 是所有组件的父类,Component 常用方法如下

  1. Component类(抽象类)主要方法
  2. Color getBackground() : 获取部件的背景色
  3. Font getFont() : 获取部件的显示字体
  4. Graphics getGraphics(): 获取部件的Graphics属性对象
  5. void setBackground(Color c) : 设置部件的背景
  6. void setEnabled(boolean b) : 是否让部件功能有效
  7. void setFont(Font f) : 设置部件的显示字体
  8. void setSize(int width,int height) : 设置部件大小
  9. void setVisible(boolean b) : 设置部件是否可见
  10. void setForeground(Color c) : 设置部件的前景色
  11. Tookit getToolkit() : 取得图形部件的工具集(Toolkit
  12. void requestFocus() : 让部件得到焦点
  13. void add(PopupMenu popup) :给部件加入弹出菜单

常用控件

文本

文本框(TextField)只能显示一行文本,文本域(TextArea)则可以显示、编辑多行文字。

文本框的构造函数如下

  1. TextField():构造一个单行文本输入框。
  2. TextField(int):指定长度的单行文本输入框。
  3. TextField(String):指定初始内容的单行文本输入框。
  4. TextField(String, int):指定长度、指定初始内容。

文本域的构造函数如下

  1. TextArea( ):构造一个文本域。
  2. TextArea(int, int):构造一个指定长度和宽度的文本域。 TextArea(String):构造一个显示指定文字的文本域。
  3. TextArea(String, int, int):按指定长度、宽度和默认值构造文本域。

文本控件的常用方法有

  1. void setEchoChar(‘*’) 设置回显字符
  2. String getText( ) :获取输入框中的数据
  3. void setText(String s) :往输入框写入数据
  4. boolean isEditable( ):判断输入框是否可编辑。
  5. void select(int start,int end):选定由开始和结 束位置指定的文本。 void selectAll( ):选定所有文本。

文本域(TextArea)中,还具有以下两个常用方法

  1. append(String s):将字符串添加到文本域的末尾
  2. insert(String s,int index):将字符串插入到文本域的指定位置

文本框有两个常用事件

ActionEvent事件

在文本框按回车键时引发

注册:addActionListener() 接口:ActionListener

方法:public void actionPerformed(ActionEvent e)

TextEvent事件

对文本输入部件数据更改操作 (添加、修改、删除)

注册: addTextListener()

接口:TextListener

方法: public void textValueChanged(TextEvent e)

java GUI 快速入门的更多相关文章

  1. Java Web快速入门——全十讲

    Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...

  2. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  3. JAVA WEB快速入门之从编写一个基于SpringMVC框架的网站了解Maven、SpringMVC、SpringJDBC

    接上篇<JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC)>,了解了Spring的核心(AOP.IOC)后,我们再来学习与实践Maven.Sp ...

  4. JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)

    接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...

  5. JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  6. 如何让一个Java新手快速入门?

    问题中问到如何让java新生快速入门,既然想快速入门的话那最简单粗暴的方法就是多看视频,加上跟着视频敲代码,刚开始可能不知道是什么意思,敲得多了就慢慢知道是什么意思了. 刚开始建议在网上找那种结合自己 ...

  7. java 多线程 快速入门

    ------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有 ...

  8. 没有基础的初学者学java怎样快速入门?超全的学习路线图

    现在地球人都知道互联网行业工资高,上万都是小case,不值一提.可是对于大部分人来说,工资七八千都算很难了.那我也想学java,当程序员,赚大钱.可是作为一个初学者,怎样才可以快速入门呢?早点入门就可 ...

  9. java框架--快速入门

    spring快速入门    1.创建项目        1.1创建项目文件夹        1.2启动idea ->文件->打开->点击创建的项目文件夹        1.3右键创建 ...

  10. JAVA WEB快速入门之环境搭建

    前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得 ...

随机推荐

  1. CS231N Assigenment1 two_layer_net笔记

    two_layer_net.ipynb 之前对 x.reshape(x.shape[0], -1)语句的输出结果理解一直有误: 1 x = [[1,4,7,2],[2,5,7,4]] 2 x = np ...

  2. ABP vNext系列文章01---模块化

    一.模块化应用  1.继承AbpModule 每个模块都应该定义一个模块类.定义模块类的最简单方法是创建一个派生自AbpModule的类,如下所示:  2.配置依赖注入和其他模块---ConfigSe ...

  3. ABP Vnext 微服务 常见问题

    1.token问题 原因:拿token和认证token的服务器不一致 2.minio访问报错 minio错误 S3 API Request made to Console port. S3 R 解决方 ...

  4. go中channel源码剖析

    channel 前言 设计的原理 共享内存 csp channel channel的定义 源码剖析 环形队列 创建 写入数据 读取数据 channel的关闭 优雅的关闭 M个receivers,一个s ...

  5. PostgreSQL中的B-TREE索引

    分析了解pgsql中的索引 前言 索引 B-tree B-Tree和B+Tree的区别: pgsql中B-Tree 实现 如果该节点不是最右节点 如果该节点是最右节点 参考 分析了解pgsql中的索引 ...

  6. 4.基于Label studio的训练数据标注指南:情感分析任务观点词抽取、属性抽取

    情感分析任务Label Studio使用指南 1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取).文本分类等 2.基于Label studio的训练数据标注指南:(智能文档) ...

  7. 【深度学习项目五】:利用LSTM网络进行情感分析(NLP)

    相关文章: [深度学习项目一]全连接神经网络实现mnist数字识别](https://blog.csdn.net/sinat_39620217/article/details/116749255?sp ...

  8. IntelliJ IDEA 查看一个接口的实现类。

  9. Windows上同时使用有线网络及无线网络连接配置

    由于公司搬到了新的办公地点,公司内部只有内网,当需要连接互联网查询资料时只能切换网络,非常麻烦.所以为了能够同时连接连接公司内网,又能够访问互联网,这里介绍如何同时连接无线和有线. 有线网络:10.3 ...

  10. Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi

    目录 简介 Asp .Net Core 集成 Panda.DynamicWebApi 配置 原理 什么是POCO Controller? POCO控制器原理 ControllerFeatureProv ...