第58节:Java中的图形界面编程-GUI

欢迎到我的简书查看我的文集
前言:
GUI是图形用户界面,在Java中,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图形用户界面就是以图形的方式来显示你计算机的操作界面, 我们计算机中操作的界面就是 我们Java中常说的图形用户界面, 这样的操作简单明了.
CLI的英文为Command Line User Interface, 是命令行用户接口, 命令行, 这就是我们程序员常常熟悉的, 常见的Dos命令行操作, 这些常用命令式需要记住的, CLI的操作就不那么直观了.
在Java中GUI提供了对象在 java.awt 和 javax.swing 两个包中
在早年中, Java.awt为抽象窗口工具包, 英文为 Abstract Window ToolKit, 需要调用本地的系统方法来实现功能需求,属于重量级的控件.
而在awt的基础上,创建了一套图形界面系统, 从而提供了更多的组件, 而且完全是由Java实现的, 增强了移植性, 属于轻量级的控件. 有自己的显示效果, 显示自己的形状, 平台要求低了, 轻量级和体统嵌入的比较浅.
继承关系

Button按钮,Label标签,Checkbox复选框,TextComponent文本组件,TextArea文本区域,TextField文本框.
组件里面还能放入组件,在Java中我们叫容器.
window 窗体, Panel 面板
Frame小窗口,Dialog对话框,FileDialog文件对话框
GUI布局
Flow 流式布局

扫雷的格式布局
布局管理
常见的布局管理器:
流式布局管理: FlowLayout, 是从左到右的排列, 是Panel默认的布局管理.
边界布局: 东南西北,中, 是Frame默认的布局管理
网格布局管理: GridLayout
卡片布局管理: CardLayout
网格包布局管理: GridBagLayout
GUI简单的小窗体
java.awt 包含用于创建用户界面和绘制图形图像的所有类.
java.awt 类 Component
java.lang.Object
-> java.awt.Component
所有已实现的接口:
ImageObserver, MenuContainer, Serializable
component 是一个具有图形表示能力的对象.



java.awt 类 Frame
java.lang.Object
-> java.awt.Component
-> java.awt Container
-> java.awt.Window
-> java.awt.Frame
实现的接口:
ImageObserver, MenuContainer, Serializable, Accessible
直接已知的子类:
JFrame
Frame是带有标题和边框的顶层窗口.

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class FrameDemo {
public static void main(String[] args) {
//1,创建一个窗体。Frame
Frame f = new Frame("my frame");
//2, 对窗体进行基本设置。
f.setSize(500, 400);
f.setLocation(400, 200);
//设置布局。
f.setLayout(new FlowLayout());
//给窗体添加组件。
Button but = new Button("my button");
//加入一个文本框组件。
TextField tf = new TextField(40);
//将组件添加到窗体中。
f.add(tf);
f.add(but);
//1,在按钮上添加所需的监听器。
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被触发了....."+e);
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("window closing");
System.exit(0);
}
@Override
public void windowOpened(WindowEvent e) {
System.out.println("孔雀开屏!window open");
}
});
but.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 2){
System.out.println("mouse double click");
}
}
});
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
//1,如何获取录入的内容。通过键盘事件对象获取。
// char key = e.getKeyChar();
// int code = e.getKeyCode();
// System.out.println(code+"...."+KeyEvent.getKeyText(code));
// int code = e.getKeyCode();
// if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){
// System.out.println("必须是0-9数字");
// e.consume();//直接取消默认处理方式。
// }
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER){
System.out.println("ctrl+enter run");
}
}
});
//3,让窗体显示。
f.setVisible(true);
System.out.println("over");
}
}
事件监听机制
- 事件源-组件
- 事件 -
Event - 监听器 -
Listener - 事件处理
Button
java.awt
classButton
java.lang.Object
-> java.awt.Component
-> java.awt.Button

监听事件:
addActionListener(ActionListener l)
添加指定的动作侦听器以从此按钮接收动作事件。

MouseListener

public interface MouseListener extends EventListener
用于在组件上接收“有趣”鼠标事件(按,释放,单击,输入和退出)的侦听器界面。

方法的详细信息:
mouseClicked
void mouseClicked(MouseEvent e)
在组件上单击鼠标按钮时调用
mousePressed
void mousePressed(MouseEvent e)
在组件上按下鼠标时调用
mouseReleased
void mouseReleased(MouseEvent e)
在组件上释放鼠标时调用
mouseEntered
void mouseEntered(MouseEvent e)
当鼠标进入组件时调用
mouseExited
void mouseExited(MouseEvent e)
当鼠标退出组件时调用


图形化界面的工具





//1,获取路径。通过文本框对象完成。
String str_dir = jTextField1.getText();
//2,将字符串路径封装成File对象。
File dir = new File(str_dir);
//判断。
if(dir.exists()&&dir.isDirectory()){
//清空文本区域。
jTextArea1.setText("");
//3,获取文件名称列表。
String[] names = dir.list();
for(String name :names){
//4,将名字显示到文本区域。
jTextArea1.append(name+LINE_SEPARATOR);
}
}

public class JFileChooser extends JComponent implements Accessible

事件监听机制流程:
- 监听器 - 将监听器注册到事件源
- 事件源 - 组件 (外部动作)
- 产生事件对象 - 将事件对象传给事件处理方式
菜单继承

MenuComponent
MenuBar,MenuItem,Menu
达叔小生:往后余生,唯独有你
You and me, we are family !
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: 达叔小生
https://www.jianshu.com/u/c785ece603d1
结语
- 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
- 小礼物走一走 or 点赞
第58节:Java中的图形界面编程-GUI的更多相关文章
- Java中的图形界面编程
前言 正文 Java中的图形界面编程 AWT/Swing AWT(Abstract Window ToolKits,抽象窗体工具集) 1.容器类:用来存储组件,实现容器布局 2.组件类:实现界面的一些 ...
- JAVA简单Swing图形界面应用演示样例
JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...
- Java第5次实验提纲(Java图形界面编程)
1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...
- 第83节:Java中的学生管理系统分页功能
第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...
- 第82节:Java中的学生管理系统
第82节:Java中的学生管理系统 学生管理系统的删除功能 删除,点击超链接,点击弹出对话框式是否进行删除,如果确定,就删除,超链接执行的是js方法,在js里访问,跳转servlet,,servlet ...
- Java第05次实验提纲(Java图形界面编程)
1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...
- Java计算器的图形界面应用程序
JAVA计算器的图形界面应用程序 题目简介: 整体分析: 实验代码: /*部分使用插件做界面*/ import java.awt.EventQueue; import javax.swing.JB ...
- 第80节:Java中的MVC设计模式
第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...
- 第79节:Java中一些要点
第79节:Java中一些要点 前言 一些知识点忘了没,可以通过一个点引出什么内容呢?做出自己的思维导图,看看自己到了哪一步了呢 内容 如果有人问jre,jdk,jvm是什么,你怎么回答呢? jre的英 ...
随机推荐
- Tigase 发送消息的流程源码分析
XMPP 的<message/>节是使用基本的”push”方法来从一个地方到另一个地方得到消息.因为消息通常是不告知的,它们是一种”fire-and-forget”(发射后自寻目的)的机制 ...
- docker-3 Apache
docker 安装 Apache 环境 docker pull httpd 文件创建连接(这样就可以不用发布了,两个文件夹会自动同步文件) ln -s /root/jenkins_home/works ...
- vm虚拟机网关配置
今天因为环境搭建,在配置完,外部始终无法访问虚拟机,一时想不出道理,后来经过端口测试,发现应该是网关配置问题,留个备注,防止以后出现同样的问题.
- vue+elementUI表格列显示隐藏遇到bug
在最近的项目中,有需求要做到根据字段显示列,原来以为简单的v-if可以解决. 在开发的过程中遇到问题, <el-table ref="multipleTable" :data ...
- Callable Future接口的设计原理
我们都知道Callable接口作为任务给线程池来执行,可以通过Future对象来获取返回值,他们背后的实现原理是什么?通过总结背后的实现原理有助于我们深入的理解相关技术,做到触类旁通和举一反三. 文章 ...
- matplotlib 绘图报错 RuntimeError: Invalid DISPLAY variable
ssh 远程登录 Linux 服务器使用 matplotlib.pyplot 绘图时报错 原因: matplotlib 在 windows 下的默认 backend 是 TkAgg:在 Linux 下 ...
- 《Java并发编程的艺术》并发编程的挑战(一)
并发编程的挑战 并发编程的初衷是让程序运行的更快,但是更多的使用多线程真的会让程序变快吗? 1.线程上下文切换 关于线程上下文切换 多个线程在一个处理器里并不是同时进行的,而是非常快速地在线程之间进行 ...
- dubbo-2.5.6优雅停机研究
不优雅的停机: 当进程存在正在运行的线程时,如果直接执行kill -9 pid时,那么这个正在执行的线程被中断,就好像一个机器运行中突然遭遇断电的情况,所导致的结果是造成服务调用的消费端报错,也有可能 ...
- [C#.net]SQL参数传入空值报错解决方案
C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value. 注意:SQL参数是不能接受C#的null值的,传入null就会报错. SqlComman ...
- 【Selenium】【BugList8】126邮箱定位不到“退出”按钮:Message: TypeError: can't access dead object
[流程描述] 登录126邮箱,退出 [代码] #coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() #dr ...