Java之美[从菜鸟到高手演变]之GUI编程(一) 认识Java GUI编程

转眼间一年过去了,自从去年毕业以后博客就没怎么更新过了,一来是因为工作忙没有太多的时间去写,二来可能自己变得比较懒惰,所以就放下了。最近突然想继续整理下Java方面的东西,所以就接着写了。为什么选择Java GUI编程?说实话这块知识在实际工作中用的比较少,可以说非常之少。但是我觉得既然是Java语言的一块,我们就有必要去了解一下,再者有不少同学经常问我会不会讲下这方面的知识点,同时,研究这块内容有助于我们学习Java的基础知识,所以我们就来研究一下。本章系Java之美[从菜鸟到高手演变]系列之Java GUI 编程一,通过本周学习,我们会了解Java GUI的基本知识。

一、Java GUI编程的现状

所谓GUI,即Graphical User Interface(图形用户接口),Java GUI说白了就是用Java进行图形化程序设计,就是我们常说的桌面应用、C/S模式的程序。比如QQ,迅雷,酷狗音乐等等。其实Java在这方面并不是长项。小型桌面程序现在一般都采用C#来编写,大型桌面程序和游戏考虑到性能问题,都采用C++。所以,很少有企业有这方面的用人需求,目前为止我好像只见过IBM会招聘eclipse插件开发的,会涉及到GUI编程。所以,对于这部分知识,我们尽量熟悉大部分控件的用法,进而去弄懂它的实现原理,就够了。目前,Java中采用Swing库来实现GUI编程,Swing是建立在AWT上的新类库,大大简化了图形界面的开发,这里我就不去说AWT、Swing概念之类的东西,有兴趣的同学自己去搜索一下。

二、AWT

简单提一下AWT相关的东西,AWT即Abstract Window Toolkit(抽象窗口工具包),是Java中用来编写图形用户界面的基本工具。由于Java是一种独立于平台的程序设计语言,但GUI却往往依赖于特定平台的,因此,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观,但不一定展现的完全一致。其实为了尽量统一界面,AWT提供的图形功能其实是各个系统能够提供的图形功能的交集,这就很大程度上为了达到统一的界面而牺牲功能。AWT中很多方法利用C/C++实现,包含本地方法,所以通常称为重量级控件。

三、Swing

Swing实现原理的不同,很好的解决了AWT的不足。纯Java代码开发,丰富的类库机组件,既解决了跨平台的问题,又可以满足各种需要,所以才会被用户接受。由于在Swing中没有使用使用本地方法实现图形功能,所以通常称为轻量级控件。下面是Swing类库中包的名称以及简介(摘自《Java Swing图形界面开发》)。


 

先做简单的了解,后面我会尽可能多的去分析。

四、布局管理器

我觉得在学习具体控件之前,应该首先了解Swing布局管理器。因为布局是整个应用程序的整体框架,所以我们先看看Swing中的布局管理。


 

有过图形界面开发的同学知道,实际的应用中需要灵活的运用布局知识,有时甚至需要多个嵌套,才能满足需求,所以一定要把这几个布局的特点牢牢掌握。下面我简单的写几个例子说明一下,关于详细的参数,还请大家自己在实际操作中多多练习。

1. BorderLayout

简单的上下左右中结构,容易懂。

package org.java.adam.swing.layout;import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class BorderLayoutTest {public static void main(String[] args) {JFrame f = new JFrame("BorderLayout Test");f.setSize(500, 300);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);JPanel p = new JPanel();f.setContentPane(p);JButton b1 = new JButton("上");JButton b2 = new JButton("下");JButton b3 = new JButton("左");JButton b4 = new JButton("右");JButton b5 = new JButton("中");BorderLayout by = new BorderLayout();f.setLayout(by);p.add(b1, "North");p.add(b2, "South");p.add(b3, "West");p.add(b4, "East");p.add(b5, "Center");}}

运行结果:

2. FlowLayout

package org.java.adam.swing.layout;import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class FlowLayoutTest {public static void main(String[] args) {JFrame f = new JFrame("FlowLayout Test");f.setSize(500, 300);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);JPanel p = new JPanel();f.setContentPane(p);JButton b1 = new JButton("上");JButton b2 = new JButton("下");JButton b3 = new JButton("左");JButton b4 = new JButton("右");JButton b5 = new JButton("中");FlowLayout by = new FlowLayout();f.setLayout(by);p.add(b1); // 不同于BorderLayout的地方 p.add(b1, "North")p.add(b2);p.add(b3);p.add(b4);p.add(b5);f.pack(); // 不同于BorderLayout的地方}
}

运行结果:

 

3. GridLayout

package org.java.adam.swing.layout;import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class GridLayoutTest {public static void main(String[] args) {JFrame f = new JFrame("FlowLayout Test");f.setSize(500, 300);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);JPanel p = new JPanel();f.setContentPane(p);JButton b1 = new JButton("1");JButton b2 = new JButton("2");JButton b3 = new JButton("3");JButton b4 = new JButton("4");JButton b5 = new JButton("5");JButton b6 = new JButton("6");JButton b7 = new JButton("7");JButton b8 = new JButton("8");JButton b9 = new JButton("9");GridLayout by = new GridLayout(3,3);f.setLayout(by);p.add(b1); p.add(b2);p.add(b3);p.add(b4);p.add(b5);p.add(b6);p.add(b7);p.add(b8);p.add(b9);f.pack();}
}


运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php docx,pptx,excel表格上传阿里云,腾讯云存储后截取第一页生成缩略图

php把word转图片的方法:首先给服务器安装libreoffice;然后使用exec函数来调用命令行操作;最后通过“exec(“soffice --headless --invisible…””方法把word转图片即可。 服务器环境:centos7 *集成环境:宝塔 我们开始给服务器安装libreoffice 直接执行下面的代码就可以…

FL Studio 21.2.3.3586 for Mac中文版新功能介绍及2024年最新更新日志

如果你正计划学习音乐制作,一款强大且易学的音乐制作软件是必不可少的。由于很多小伙伴对音乐制作软件没有实际体验过,到底选择哪一款软件最合适成为当下最纠结的问题。 这里为大家推荐一款功能强大且适合新手小伙伴的音乐编曲软件—FL Studio 21.2.3.35…

nginx 模块 高级配置

目录 一、高级配置 1.1. 网页的状态页 1.2.Nginx 第三方模块 ehco 模块 打印 1.3.变量 1.3.1 内置变量 1.3.2自定义变量 1.4.Nginx压缩功能 1.5.https 功能 1.6.自定义图标 一、高级配置 1.1. 网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现&…

The authenticity of host ‘github.com (20.205.243.166)‘ can‘t be established.

1、运行git clone报错: The authenticity of host github.com (20.205.243.166) cant be established. ECDSA key fingerprint is SHA256:p2QAC1TJYererOttrVc98/R1BWERWu3/LiyFdHfQM. Are you sure you want to continue connecting (yes/no/[fingerprint])? 这个…

【盲源分离】快速理解FastICA算法(附MATLAB绘图程序)

今天讲一个在信号分析领域较为常用的一个方法,即盲源分离算法中的FastICA。 我们先从一个经典的问题引入。 一、鸡尾酒舞会问题 想象一下,你身处一个熙熙攘攘的鸡尾酒舞会中。四周回荡着各种声音:笑声、交谈声、玻璃碰撞声,甚至…

物联网常见协议之MQTT 详解

一、简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上&#xff0c…

基于PostgreSql操作空间数据Geometry类型

一、简介 空间数据是指用来表示空间实体的位置、形状、大小及其分布特征诸多方面信息的数据,它可以用来描述来自现实世界的目标,它具有定位、定性、时间和空间关系等特性,操作空间数据主要是指对点、线、面等基本结构的一个操作。 在Postgre…

javaEE图书馆自习室订座系统信用springmvc+springboot+mybatis

研究的内容是设计和实现图书馆自习室系统,便捷广大师生对自习室的使用,协助图书馆自习室管理。在设计过程中,系统的用户角色和权限分配如下: (1)馆长 用户管理:拥有自习室管理员、普通用户的所有…

优雅使用前端枚举Enum,符合国标的那种!

01、什么是枚举Enum? 枚举Enum是在多种语言中都有的一种数据类型,用于表示一组特定相关的常量数据集合,如性别(男、女)、数据状态(可用、禁用)、垂直对齐(顶端、居中、底部&#xff…

AD9226 65M采样 模数转换

目录 AD9220_ReadTEST AD9220_ReadModule AD9226_TEST_tb 自己再写个 260M的时钟,四分频来提供65M的时钟。 用 vivado 写的 AD9226_ReadTEST module AD9226_ReadTEST( input clk, input rstn,output clk_driver, //模块时钟管脚 input [12:0]IO_data, //模块数…

深度学习 精选笔记(5)多层感知机

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

spring自定义事件监听器

1. 创建自定义事件 import org.springframework.context.ApplicationEvent; import java.util.List;public class CollectionCreateEvent extends ApplicationEvent {private List<String> fileList;public CollectionCreateEvent(Object source,List<String> file…

vscode——本地配置(C和C++环境配置)(2)

vscode——本地配置&#xff08;2&#xff09; 配置C语言编译看看.json文件编译多个C文件C/C调试 今天我们继续来看vscode的配置&#xff0c;如果没看过上一次的文章&#xff0c;大家可以点击&#xff1a; https://blog.csdn.net/qq_67693066/article/details/136315696 配置C语…

【漏洞复现】鸿运(通天星CMSV6车载)主动安全监控云平台存在敏感信息泄露漏

漏洞描述 鸿运(通天星CMSV6车载)主动安全监控云平台实现对计算资源、存储资源、网络资源、云应用服务进行7*24小时全时区、多地域、全方位、立体式、智能化的IT运维监控,保障IT系统安全、稳定、可靠运行。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法…

leetcode 3.反转链表;

1.题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 2.用例&#xff1a; 3.题目解析&#xff1a; &#xff08;1&#xff09;函数头&#xff1a; 要求返回结点&#xff0c;就 ListNode* reverseList(ListNode* head)&…

海量物理刚体 高性能物理引擎Unity Physics和Havok Physics的简单性能对比

之前的博客中我们为了绕过ECS架构&#xff0c;相当于单独用Batch Renderer Group实现了一个精简版的Entities Graphics&#xff0c;又使用Jobs版RVO2实现了10w人同屏避障移动。 万人同屏对抗割草 性能测试 PC 手机端 性能表现 弹幕游戏 海量单位同屏渲染 锁敌 避障 非ECS 那么有…

Android Activity启动模式

文章目录 Android Activity启动模式概述四种启动模式Intent标记二者区别 Android Activity启动模式 概述 Activity 的管理方式是任务栈。栈是先进后出的结构。 四种启动模式 启动模式说明适用场景standard标准模式默认模式&#xff0c;每次启动Activity都会创建一个新的Act…

最新IE跳转Edge浏览器解决办法(2024.2.26)

最新IE跳转Edge浏览器解决办法&#xff08;2024.2.26&#xff09; 1. IE跳转原因1.1. 原先解决办法1.2. 最新解决办法1.3. 最后 1. IE跳转原因 关于IE跳转问题是由于在2023年2月14日&#xff0c;微软正式告别IE浏览器&#xff0c;导致很多使用Windows10系统的电脑在打开IE浏览…

kubectl 声明式资源管理方式

目录 介绍 YAML 语法格式 命令 应用yaml文件指定的资源 删除yaml文件指定的资源 查看资源的yaml格式信息 查看yaml文件字段说明 查看 api 资源版本标签 修改yaml文件指定的资源 离线修改 在线修改 编写yaml文件 创建资源对象 查看创建的pod资源 创建service服务对…

虚拟机CentOS7仓库被禁用无法进行yum命令

执行yum repolist all命令时&#xff0c;仓库全被禁用 使用sudo yum-config-manager --enable C7.5.1804-base/x86_64去尝试启用其中的仓库时没反应 通过ls /etc/yum.repos.d/命令发现 [rootlocalhost ~]# ls /etc/yum.repos.d/ CentOS-Base.repo.bak CentOS-fasttrack.repo Ce…