虽然目前Java算不上前端开发的主力,但是作为Java入门基础的一部分,学习Java的GUI编程还是有必要的,而且可以做出一些小且有趣的图形程序来提高学习热情。本篇学习总结均为一个Beginner的笔记与心得,如有描述不到或错误之处,敬请指正。

  目录:

  1. JavaGUI主要开发工具 -- Swing类库的诞生与功能
  2. 创建JFrame框架
  3. 在框架中添加组件JComponent

  1. JavaGUI主要开发工具 -- Swing类库的诞生与功能

  一个合格的Java Developer,不仅要掌握技术,还要有一定的Java历史背景知识储备。所以先简要介绍一下用于JavaGUI开发的主要类库:Swing。

  在Java 1.0时代便有设计GUI的基本类库Abstract Window Toolkit,简称AWT。AWT库工作原理是将处理用户界面元素的任务委派给目标平台(操作系统)的本地GUI工具箱,由本地GUI工具箱负责用户界面元素的创建和动作。这种工作方式是有利也有弊,先说下利处:

  • 处理速度可能要快一点。
  • 可以适应不同的平台,“一次编写,随处使用”。

  弊处:

  • 观感依赖于目标平台。
  • 有些平台并没有像Windows或Mac这样丰富的界面组件(早期)。所以把AWT的设计工作限制在了“最小公分母”。
  • 不同平台存在不同的bug。

  1996年,Netscape创建了另一种GUI库IFC,他的工作方式是 将用户界面组件绘制在空白窗口上,而对等体只需要负责创建和绘制空白窗口。Sun和Netscape合作并完善了这种方式,创建了名为Swing的用户界面库,这便是Swing的诞生

  但是Swing并没有完全取代AWT,到目前Java SE 8中依旧有AWT与Swing两个功能类库:

  • AWT import java.awt (java包为核心包)
  • Swing import javax.swing (javax包为功能扩展包)

  Swing没有完全取代AWT的原因是:Swing是基于AWT的架构之上,Swing仅仅是提供了能力更强大的用户界面组件。在Swing编写的程序中,还是需要AWT进行事件处理。简单说就是,Swing是用户界面类,AWT是底层机制

AWT和Swing中框架和组件类的继承层次

  2.创建JFrame框架

  Frame意为框架,也就是最顶层的窗口,可以在框架里添加组件。我们创建一个窗口首先要创建一个框架。

JFrame的内部结构

  

  注:Swing组件类都以“J”开头,如 JButton,JFrame等,AWT组件不带“J"。如果Swing组件和AWT组件一起用可能会导致视觉和行为的不一致。

  现在,我们来创建一个空框架:

 1 package simpleFrame;
 2
 3 //会用到awt和swing的类,先import。
 4 import java.awt.*;
 5 import javax.swing.*;
 6
 7 //创建一个SimpleFrame的类,里面只有一个main函数,main函数里有个事件分派线程。
 8 public class SimpleFrame {
 9     public static void main(String[] args) {
10         EventQueue.invokeLater(new Runnable() {
11             public void run() {
12                 JFrame frame = new SizedFrame(); //new一个SizeFrame对象给frame变量管理,这便有了框架。SizeFrame是JFrame的子类。
13                 frame.setTitle("SimpleFrame");   //设置框架的标题.
14                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设定关闭按钮。
15                 frame.setVisible(true);          //设定框架可见。
16             }
17         });
18     }
19 }
20
21 //其实到这里为止,我们可以在第12行直接new一个JFrame交给frame,但是JFrame默认框架大小是0×0,没什么实际意义。
22 //所以我们选择继承JFrame做一个子类起名SizedFrame,在这个类里做一个构造器来设定框架的大小。
23 class SizedFrame extends JFrame {
24
25     //构造器
26     public SizedFrame() {
27
28         //下面四行代码为获取你pc屏幕的高度和宽度,交给int变量screenHeight和screenWidth。
29         Toolkit kit = Toolkit.getDefaultToolkit();
30         Dimension screenSize = kit.getScreenSize();
31         int screenHeight = screenSize.height;
32         int screenWidth = screenSize.width;
33
34         //setSize方法由父类Component类(GUI对象的祖先)继承而来。设定框架长宽都为屏幕的1/2.
35         //setLocationByPlatform由Window类(Frame类的父类)继承而来。由平台(操作系统)来选择一个合适的显示位置。
36         setSize(screenWidth/2,screenHeight/2);
37         setLocationByPlatform(true);
38
39         //setIconImage方法由Frame类继承而来,设置框架图标。
40         Image img = new ImageIcon("icon.gif").getImage();
41         setIconImage(img);
42
43         //当然,事件分派线程里的设定标题、设定关闭按钮、和设定框架可见操作,也可以放在构造器里来做。
44     }
45 }

  Windows 10下运行:

  3.在框架中添加组件JComponent

  在Java中,Frame被设计成放置组件的容器,可以将用户界面元素放置其中,JComponent就是一种组件(component本身就意为组件)。所以,现在我们可以在JComponent中书写一些文字,并将其放置在Frame中:

 1 package notHelloWorld;
 2
 3 import java.awt.*;
 4 import javax.swing.*;
 5
 6 public class NotHelloWorld {
 7     public static void main(String[] args) {
 8         EventQueue.invokeLater(new Runnable() {
 9             public void run() {
10                 JFrame frame = new NotHelloWorldFrame();
11                 frame.setTitle("NotHelloWorld");
12                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
13                 frame.setVisible(true);
14             }
15         });
16     }
17 }
18
19 class NotHelloWorldFrame extends JFrame {
20
21     //构造器
22     public NotHelloWorldFrame() {
23         //在框架中add组件并pack。
24         //当然也可以不必扩展JFrame类,可以直接在第10行new一个JFrame对象,并在其后add组件。
25         //这里我们没有设置框架的长宽,因为组件JComponent有长宽,框架会根据组件的大小调整自己的长宽。
26         add(new NotHelloWorldComponent());
27         pack();
28     }
29 }
30
31 class NotHelloWorldComponent extends JComponent {
32     public static final int MASSAGE_X = 75;
33     public static final int MASSAGE_Y = 100;
34
35     private static final int DEFAULT_WIDTH = 300;
36     private static final int DEFAULT_HEIGHT = 200;
37
38     //必须覆盖paintComponent方法才能让组件自己把自己画出来。
39     //这个方法需要一个Graphics对象,在Java中,所有绘制必须使用Graphics对象。
40     public void paintComponent(Graphics g) {
41         //画出一个字符串,并设置自组件左上角(0,0)开始显示的位置。
42         g.drawString("Not a 'Hello, World!' program.", MASSAGE_X, MASSAGE_Y);
43     }
44
45     //还要覆盖此方法以确定组件的首选长宽。
46     public Dimension getPreferredSize() {
47         return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
48     }
49 }

  运行:

转载于:https://www.cnblogs.com/xingyazhao/p/5961455.html

Java基础学习总结 -- 图形用户界面GUI相关推荐

  1. Java高级教程3_图形用户界面GUI

    张老师的Java高级教程中图形用户界面GUI对应的笔记 网络编辑器还要重新排版,提供原始文件下载,先看个概貌 Java高级3_图形用户界面GUI AWT的基础知识 GUI:Graphical User ...

  2. java图形界面包_抽象窗口工具包( )是java提供的建立图形用户界面GUI的开发包

    抽象窗口工具包( )是java提供的建立图形用户界面GUI的开发包 劈指是用大指弹奏的.A:对B:错 要保证权利与义务相对等,寿险保费的计算就必须遵循收支平衡的原则.A:对B:错 抽样平均误差的实质是 ...

  3. 一个编程小白的Java SE学习日志 Ⅸ—— 图形界面GUI【极客BOY-米奇】

    文章目录 前言(转载请说明作者!)4.22~4.26编写 目标 任务导引:收银系统 分析 图形界面概述 包 java.awt包 java.swing包※ 如何创建用户图形界面 创建容器 如何构造JFr ...

  4. Java基础知识笔记-11_2-Swing用户界面组件

    Java基础知识笔记-11_2-Swing用户界面组件 这章教程两个版本,一个语法是非lambda表达式版本,另一个是lambda表达式版本 非lambda表达式版本 1 Java Swing概述 J ...

  5. php7可以做什么开发,php7 图形用户界面GUI 开发怎么做?看完这个代码你就明白了...

    [摘要]php7作为PHP的一个版本,也能实现很多功能,不过今天环球网校的小编要为大家讲解php7 图形用户界面GUI 开发怎么做?看完这个代码你就明白了,因为只要你了解了php7 图形用户界面GUI ...

  6. Java 基础学习-Java语言概述

    Java 基础学习 第一章 Java语言概述 回顾java基础知识,进行整理记录. 文章目录 Java 基础学习 前言 一. Java语言发展史(了解) 二.Java语言跨平台原理(理解) 三.JRE ...

  7. JAVA基础学习精简心得笔记整理

    JAVA基础学习精简心得笔记整理 配置java环境变量 Java的运行过程  基本数据类型 引用数据类型 逻辑运算符 数组 方法重载 封装 继承 多态 多态的作用 单例设计模式 接口interface ...

  8. php做gui,php7 图形用户界面GUI如何开发

    php7 图形用户界面GUI如何开发?这篇文章主要介绍了php7 图形用户界面GUI 开发,结合实例形式分析了PHP7基于php_ui扩展实现的图形用户界面GUI相关操作技巧,感兴趣的用户就来一聚教程 ...

  9. java基础学习整理(一)

    java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...

最新文章

  1. idea+tomcat+struts2 搭建一个web实例
  2. 机器学习之人脸识别face_recognition使用
  3. Centos7装NVIDIA显卡驱动(GPU)
  4. 让IT工作者过度劳累的12个坏习惯
  5. 抖音为什么能让人上瘾?
  6. apicloud mysql 登录_PHP+MySQL实现前台的登陆注册。
  7. 不想听别人的建议,就不要问
  8. 常见网络厂商Mib库文件
  9. mysql超卖问题处理_高并发下超卖问题及如何解决
  10. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
  11. 1024X600RGB屏幕规格书分析
  12. Preact 在TSX中优雅使用className
  13. Tapestry介绍
  14. 如何获取自己的公网地址
  15. oracle函数(in/out)
  16. iframe 去除边框和自适应高度
  17. VGA及其支持的模式
  18. 音乐节为什么需要网络覆盖?如何搭建临时稳定WiFi?
  19. android java websocket client_websocket服务端,android客户端示例
  20. Python实战HSV颜色模型——提取像素点并判断像素点颜色

热门文章

  1. 图书封面的故事之——“巴别塔”选自《七周七语言:理解多种编程范型》
  2. Expression Blend实战开发技巧 第四章 从最常用ButtonStyle开始 - PathButton
  3. 简单总结PPPoE设置
  4. NDoc使用简要手册的补充
  5. google 插件_google这4款插件我每天都用,省时无数
  6. python做视频特效_python实现超简单的视频对象提取功能
  7. centos php 显示错误提示,Centos下编译php的典型错误及解决
  8. mysql maria引擎_MySQL/MariaDB---查询缓存与存储引擎
  9. idata界面_iData手持终端常见问题集,持续更新中...
  10. python外汇交易回测系统_易经量化交易系统之回测系统1