java GUI 快速入门
java 中编写 GUI 有两中工具包,分别为 AWT、Swing。
Swing 是 AWT 的拓展,Swing 具有比 AWT 丰富的组件和方法。
AWT 和 Swing 都能跨平台使用;AWT 会随着不同的系统平台,UI 样式会有所变化,Swing 则不会,设计完毕后在所有平台下样式一致。
import java.awt.*;
import javax.swing.*;
一个 awt 示例
下面是一个窗口示例
import java.awt.*;
public class MyFrame extends Frame {
public MyFrame(){
super("测试");
setSize(400,200);
setVisible(true);
}
public static void Main(String args[]){
new MyFrame();
}
}

创建一个窗口,要继承 Frame,同时会继承 Frame 中的一些方法;
Frame 中:
- super 方法可以设置窗口标题;
- setSize 设置窗口大小,
(width,hight) - setVisible 设置是否显示窗口,true 显示,false 隐藏
setLayout(new FlowLayout());用于设置窗口布局;
add(组件); 用于向窗口添加组件,例如按钮等。
我们来向窗口添加组件
import java.awt.*;
public class MyFrame extends Frame {
public MyFrame(){
super("测试");
setLayout(new FlowLayout());
Button btn=new Button("Button");
Font f=new Font("宋体",Font.BOLD,28);
btn.setFont(f);
add(btn);
setSize(400,200);
setVisible(true);
}
在 main 方法中启动窗口
public static void main(String args[]){
new MyFrame();
}
效果

事件
java 中,事件分为三个方面描述,
事件源:发生事件的对象
事件处理:委托事件处理模型
事件监听者:负责处理事件

首先B监听A,设置监听的内容,并设置响应内容。
一旦A本身的状态改变,就触发C;
C执行D
妈妈跟儿子说,你作业做完了,妈妈就让爸爸就给你削个苹果吃。
妈妈:事件监控者
儿子:事件源
动作:做完作业
事件:爸爸削个苹果给儿子
妈妈监控儿子,监控是否完成作业。设置作业完成后,触发事件:削苹果;
儿子做完作业,状态变更,触发事件;事件开始执行。
简单来说 B 告诉 A ,如果 A 怎么样了,就去做一件事情C。
实现事件流程
我们继续利用上面的窗口,实现按钮点击时,改变窗口背景颜色。
实现一个事件
引入
import java.awt.event.ActionListener;
实现接口
class Test implements ActionListener{
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("执行工作");
}
将事件注册到控件上
package com.company;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyFrame extends Frame implements ActionListener {
public MyFrame(){
super("测试");
setLayout(new FlowLayout());
Button btn=new Button("Button");
Font f=new Font("宋体",Font.BOLD,28);
btn.setFont(f);
btn.addActionListener(this::actionPerformed);
add(btn);
setSize(400,200);
setVisible(true);
}
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("执行工作");
setBackground(Color.BLUE);
}
}
按钮有个事件监听器 addActionListener,我们将要执行的工作 actionPerformed 绑定进去。
当条件发生时,就会触发此工作。
妈耶,我都不知道自己在说啥了。
C# 中,事件没有那么麻烦,也不需要这么BB。。。
另外, actionEvent ,有两个常用方法
actionEvent.getActionCommand(); // 获取对象名称
actionEvent.getSource()(); // 获取源对象
布局
AWT 中,主要有 6 中布局方式。
- FlowLayout 流式布局
默认布局,控件从上到下,从左到右地排序。 - BorderLayout 边缘布局
自动停靠窗体边缘,并且长宽随着窗体的变化。

- GridLayout 网格布局
将容器分成若干行和若干列。 - CradLayout 卡片布局
像扑克牌一样,每张牌是一个控件,多个控件叠加起来,每次只能查看一个。 - GridBagLayout 网格块布局
- null 采用坐标定位布局
创建一个窗体,并设置流式布局
public class MyFrame extends Frame {
public MyFrame(){
super("测试");
setLayout(new FlowLayout());
}
}
继承 Frame 的窗体中,使用 setLayout方法 可以设置布局。
组件方法
如图是 GUI 控件中常用的控件关系继承图。

组件分为容器(Container)和控件。
容器又分为窗体(Window)和面板(Panel)。
Component 是所有组件的父类,Component 常用方法如下
Component类(抽象类)主要方法
Color getBackground() : 获取部件的背景色
Font getFont() : 获取部件的显示字体
Graphics getGraphics(): 获取部件的Graphics属性对象
void setBackground(Color c) : 设置部件的背景
void setEnabled(boolean b) : 是否让部件功能有效
void setFont(Font f) : 设置部件的显示字体
void setSize(int width,int height) : 设置部件大小
void setVisible(boolean b) : 设置部件是否可见
void setForeground(Color c) : 设置部件的前景色
Tookit getToolkit() : 取得图形部件的工具集(Toolkit)
void requestFocus() : 让部件得到焦点
void add(PopupMenu popup) :给部件加入弹出菜单
常用控件
文本
文本框(TextField)只能显示一行文本,文本域(TextArea)则可以显示、编辑多行文字。
文本框的构造函数如下
TextField():构造一个单行文本输入框。
TextField(int):指定长度的单行文本输入框。
TextField(String):指定初始内容的单行文本输入框。
TextField(String, int):指定长度、指定初始内容。
文本域的构造函数如下
TextArea( ):构造一个文本域。
TextArea(int, int):构造一个指定长度和宽度的文本域。 TextArea(String):构造一个显示指定文字的文本域。
TextArea(String, int, int):按指定长度、宽度和默认值构造文本域。
文本控件的常用方法有
void setEchoChar(‘*’) 设置回显字符
String getText( ) :获取输入框中的数据
void setText(String s) :往输入框写入数据
boolean isEditable( ):判断输入框是否可编辑。
void select(int start,int end):选定由开始和结 束位置指定的文本。 void selectAll( ):选定所有文本。
文本域(TextArea)中,还具有以下两个常用方法
append(String s):将字符串添加到文本域的末尾
insert(String s,int index):将字符串插入到文本域的指定位置
文本框有两个常用事件
ActionEvent事件
在文本框按回车键时引发
注册:addActionListener() 接口:ActionListener
方法:public void actionPerformed(ActionEvent e)
TextEvent事件
对文本输入部件数据更改操作 (添加、修改、删除)
注册: addTextListener()
接口:TextListener
方法: public void textValueChanged(TextEvent e)
java GUI 快速入门的更多相关文章
- Java Web快速入门——全十讲
Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...
- JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...
- JAVA WEB快速入门之从编写一个基于SpringMVC框架的网站了解Maven、SpringMVC、SpringJDBC
接上篇<JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC)>,了解了Spring的核心(AOP.IOC)后,我们再来学习与实践Maven.Sp ...
- JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...
- JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署
接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...
- 如何让一个Java新手快速入门?
问题中问到如何让java新生快速入门,既然想快速入门的话那最简单粗暴的方法就是多看视频,加上跟着视频敲代码,刚开始可能不知道是什么意思,敲得多了就慢慢知道是什么意思了. 刚开始建议在网上找那种结合自己 ...
- java 多线程 快速入门
------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有 ...
- 没有基础的初学者学java怎样快速入门?超全的学习路线图
现在地球人都知道互联网行业工资高,上万都是小case,不值一提.可是对于大部分人来说,工资七八千都算很难了.那我也想学java,当程序员,赚大钱.可是作为一个初学者,怎样才可以快速入门呢?早点入门就可 ...
- java框架--快速入门
spring快速入门 1.创建项目 1.1创建项目文件夹 1.2启动idea ->文件->打开->点击创建的项目文件夹 1.3右键创建 ...
- JAVA WEB快速入门之环境搭建
前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得 ...
随机推荐
- TypeScript 类型增强declare的使用
类型增强 declare 的使用 1.如果一个有一个全局变量 golabaol . 在index.html中. 2.我们在xx.vue中使用 golabaol .这个时候会报错 找不到名称" ...
- 让你彻底理解Typescript中静态成员和抽象方法
1.Typescript中static详解 静态成员:在类中通过 static 修饰的属性或者方法 那么就是静态的属性静态方法 也称之为:静态成员(静态成员包含静态属性和静态方法) 静态成员在使用的时 ...
- SqlSugar联表查询
Join用法 语法糖1.2和3 在Where OrderBy GroupBy Select用法都一样的,他们区别就在JOIN的方式不一样,其它都一样 语法糖1 优点:好理解,5个表以内的联表非常爽,支 ...
- C/C++ 实现枚举网上邻居信息
在Windows系统中,通过网络邻居可以方便地查看本地网络中的共享资源和计算机.通过使用Windows API中的一些网络相关函数,我们可以实现枚举网络邻居信息的功能,获取连接到本地网络的其他计算机的 ...
- C# 语言程序设计笔记
C#是一种最新的.面向对象的编程语言.它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领 ...
- spring cloud与加密库jasypt(ulisesbocchio)冲突问题定位
背景 最近在项目上遇到个问题.项目就是普通的spring cloud,spring cloud在spring boot的基础上多了一些东西,比如支持bootstrap上下文(通过bootstrap.y ...
- Linux C/C++ 获取进程号、线程号和设置线程名
1 前言 在Linux开发过程中,设计多线程开发时可以将进程和线程的 id 打印出来,方便开发调试和后期查问题使用,同时也包括设置线程名. 2 函数及头文件 2.1 进程ID #include < ...
- .NET Core开发实战(第16课:选项数据热更新:让服务感知配置的变化)--学习笔记
16 | 选项数据热更新:让服务感知配置的变化 选项框架还有两个关键类型: 1.IOptionsMonitor 2.IOptionsSnapshot 场景: 1.范围作用域类型使用 IOptinsSn ...
- CF1861
只做出 A,身败名裂 A 显然不管怎么排,13,31 总有一个会出现,看看哪个出现. B 给定两个 01 串,每次可以挑一个串的一个子串,要求两端相同,然后把这个子串全部变得和两端相同. 问经过若干次 ...
- 从零开始的 dbt 入门教程 (dbt core 开发进阶篇)
引 在上一篇文章中,我们花了专门的篇幅介绍了 dbt 更多实用的命令,那么我们继续按照之前的约定来聊 dbt 中你可能会遇到的疑惑以及有用的概念,如果你是 dbt 初学者,我相信如下知识点一定会对你有 ...