第12章 图形用户界面基础

2023-11-05

1、Swing和AWT的不同:

     AWT适合开发简单的图形用户界面,但不适合开发复杂的GUI项目,也容易发生于特定平台相关的故障。(重量级组件)
     SWing更稳定、更通用、更灵活,不依赖于自己GUI。(轻量级组件) SWing GUI组件类都以字母J为前缀来命名。
2、Java GUI API
     GUI API包含的类可以分为三个组:组件类(component class)、容器类(container class)、辅助类(helper class)。
     ①组件类
          Component类的实例可以显示在屏幕上,是包括容器类的所有用户界面类的根类,JComponent类是所有轻量级Swing组件类的根类,二者都是抽象类,不能使用new操作符创建实例。
     ②容器类
          一个Container的实例可以包含Component实例。
          AWT组件的容器类:Window、Panel、Applet、Frame、Dialog
          Swing组件的容器类:Container、JFrame、JDialog、JApplet、JPanel
      
     ③GUI辅助类
          辅助类都不是Component的子类,他们用来描述GUI组件的属性。
          
3、 框架   
     创建一个用户界面需要创建一个框架或一个applet来存放用户界面组件。
     ①使用JFrame类创建一个框架:
         
     直到调用frame.setVisible(true)方法后才会显示框架,调用setLocationRelativeTo(null)方法可在屏幕上居中显示框架,调用 setDefaultCloseOperation(JFrame.  EXIT_ON_CLOSE  ) 来告诉程序,当框架关闭时结束程序,否则关闭框架后程序并不会结束。
     ②向框架添加组件
          frame.add()  内容窗格授权,组件添加到框架的内容窗格中,默认布局管理器是将按钮放到中央。
4、布局管理器
     GUI组件的位置是由容器的布局管理器来管理的,布局管理器是使用布局管理类创建的。
     使用setLayout(aLayoutManager)方法设置布局管理器。
     ①FlowLayout
          最简单的布局管理器,按照组件添加的顺序,从左到右将组件排列在容器中。可以使用三个常量FlowLayout.RIGHT、FlowLayout.CENTER、FlowLayout.LEFT之一来指定组件的对齐方式。
          
         如:  setLayout( new  FlowLayout(FlowLayout.  LEFT , 10, 20)); //创建匿名的FlowLayout对象,没必要显式引用。
         推荐风格:大多GUI主类都将扩展JFrame类,这个主类的构造方法创建用户界面。main方法创建这个主类的实例,并显示这个框架。使用FlowLayout管理器在框架中放置组件,如果改变框架的大小,组件会自动地重新排列以适合框架。
            GUI组件只可以添加到一个容器中出现一次,将一个组件向容器添加多次和一次是一样的。
     ②GridLayout
          以网格矩阵的形式管理组件,组件按照添加的顺序从左到右排列。如果行数或者列数有个为零,则为零的行或列的大小由布局管理器动态决定;如果都不为零,则行数是固定的,动态地计算列数。
          
          在FlowLayout和GridLayout两个布局管理器中,组件添加到容器的顺序是很重要的,它决定了组件在容器中的位置。
     ③BorderLayout
          将容器分成五个区域:东区、南区、西区、北区和中央。同一区域添加两个组件,只会显示最后一个。
          
          BorderLayout的add方法不同,需要指定组件放置的位置,如: add( new  JButton(  "East" ), BorderLayout. EAST );
     ④布局管理器的属性
          如果需要动态地改变布局管理器的属性,必须用一个变量显式引用,然后通过该变量来改变。
5、使用面板作为子容器(JPanel)
     使用java图形用户界面进行程序设计,可以将窗口分为几个面板,面板的作用就是分组放置用户界面组件的子容器,将组件添加到一个面板,再讲面板添加到另一个面板或框架中。
     可以使用new JPanel()创建一个带默认FlowLayout管理器的面板,也可以使用new JPanel(LayoutManager)创建一个带特定布局管理器的面板。使用add(Component)方法向面板添加一个组件。
      Container类是像JButton这样的GUI组件类的父类。每个GUI组件都是一个容器,理论上讲可以使用setLayout方法设置布局,并将另个组件添加进去,因为Cantainer类中所有公共方法都已被继承。但是如果不是实际情况不得已,是不应该将它们作为容器使用的。

6、Color类
     使用java.awt.Color类为GUI组件设置颜色,RGB模式。也可选择使用为常量的13种标准颜色。
     使用public Color(int r,int g,int b);构造方法创建一个color对象,r、g和b的取值在0至255之间,如果超过这个范围,就会导致一个IllegalArguException异常。
     可以使用定义在java.awt.Component类中的setBackground(Color c)和setForeground(Color c)方法来设置一个组件的背景色和前景色。
7、Font类
     使用java.awt.Font类创建一种字体,然后使用Component类的setFont方法设置组件字体。
     Font的构造方法是:
          public Font(String name,int style,int size);
     下面语句打印系统所有可用字体的名字:
       GraphicsEnvironment  e  = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[]  fontnames  =  e .getAvailableFontFamilyNames() ;
        for ( int  i =0;i<fontnames.length;i++)
              System.out.println(fontnames[i]);
8、Swing GUI组件的公共特性
     Component类是所有GUI组件和容器的根,所有SWing GUI组件(除了JFrame、JApplet和JDialog)都是JComponent的子类。
          
     可以给JComponent类的任何对象设置边界,使用new TitleBorder(String title)创建一个带标题的边界,使用new LineBorder(Color color ,int width)创建一个线边界。
     不同组件中同样的属性会有不同的默认值,例如JFrame中的visible属性默认值为false,但在JComponent的每个实例(例如JButton和JLabel)中该属性默认值都为true。为了显示一个JFrame,必须调用setVisible(true),但不必为JButton或JLabel设置该属性,因为它已经为true。
9、图像图标
     java目前支持三种图像格式:GIF、JPEG、PNG。使用new java.swing.ImageIcon(filename)创建一个ImageIcon对象。为了使程序可以在所有平台上运行,就将所有图像文件统一使用小写命名。
     GUI组件不能被多个容器共享,因为一个GUI组件只能在一个容器中出现一次,因此组件和容器之间的关系是用实心菱形表示的组合关系。但边界和图标是可以共享的。
(注:截图来自梁勇《Java语言程序设计》中文版)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第12章 图形用户界面基础 的相关文章

随机推荐

  • linux 非root用户 安装pyscipopt

    前提 实验室的服务器 我没有root权限 1 尝试用conda方法onda install channel conda forge pyscipopt 出现未知错误 搜遍百度谷歌stackoverflow都没有找到有人和我一样的问题 不知道
  • 基于Java的贪吃蛇小游戏

    一 开发思路 设定一个一定大小的且大小不可变的游戏窗口 在创建的窗口上绘制游戏的基本面板样式 使用提前保存的素材图标绘制一条静态的小蛇 使小蛇能够移动 实际只需蛇头坐标移动 每节身体覆盖前一节身体坐标 设置定时器Timer timer ne
  • Java的异常处理机制

    一 什么是java异常 java异常指在程序运行时可能出现的一些错误 如 文件找不到 网络连接失败 非法参数等 异常是一个事件 它发生在程序运行期间 中断了正在执行的程序的正常指令流 Java通过API中Throwable类的众多子类描述各
  • C# SuperSocket 手把手教你入门 傻瓜教程---9(CountSpliterReceiveFilter - 固定数量分隔符协议)使用COMMAND

    C SuperSocket 手把手教你入门 傻瓜教程系列教程 C SuperSocket 手把手教你入门 傻瓜教程 1 服务器单向接收客户端发送数据 C SuperSocket 手把手教你入门 傻瓜教程 2 服务器和客户端双向通信 C Su
  • Linux服务器wget:unable to resolve host address解决方法

    Linux服务器wget unable to resolve host address解决方法 问题 今天使用虚拟机安装linux系统镜像使用的是CentOS 在一切都准备好的时候 想要去安装Redis时碰到了wget unable to
  • 自定义九宫格控件NineGridLayout ,实现微信朋友圈图片九宫格显示

    前言 很多时候我们都在刷微博或者微信朋友圈的时候都会看到很多图片 而这些图片的显示跟我们平时很多控件的显示方式都不一样 而且 当我们仔细去观察后就会发现 他加载的图片都是根据图片数量动态加载的 根据不同的图片数量来用不同的布局显示 如下图
  • 硬件防火墙和软件防火墙的区别有哪些?

    什么是防火墙 防火墙 指由软件和硬件设备组合而成 在内部网和外部网之间 局域网与外网之间的保护屏障 就像架起了一面墙 它能使网络之间建立起一个安全网关 从而保护内部网免受非法用户的侵入 熟悉互联网的朋友一定对防火墙不陌生 不管是电脑自带的防
  • OBJ格式简单用法

    参考 https www cnblogs com hont p 5239725 html https zhuanlan zhihu com p 342244212 http zwqxin com archives opengl obj mo
  • ceph-deploy命令应用

    记录 336 场景 在CentOS 7 9操作系统上 使用ceph deploy创建ceph集群 部署集群的mon mgr mds osd rgw等组件 版本 操作系统 CentOS 7 9 ceph版本 ceph 13 2 10 名词 c
  • Flask简单调用Redis、MySQL和生成token及token验证

    项目地址 https github com MasonYyp myflask 1 安装python基础环境 安装flask pip install flask 安装redis pip install redis 安装操作MySQL的包 pi
  • 如家酒店房价爬虫

    爬取地址 http m homeinns com hotels J10013 如家精选 北京中关村东路店 首先 从chrome浏览器打开F12审查元素 价格是用背景图片形式展现的 我们先获取背景图片 图片url 图片地址为 http m h
  • Java 基础入门篇(五):面向对象编程

    文章目录 一 面向对象的思想 二 类的定义与对象的创建 三 对象内存分配情况 3 1 两个对象的内存图 3 2 两个变量指向同一个对象内存图 四 构造器 4 1 构造器的格式与分类 4 2 构造器的调用 五 this 关键字 六 封装 七
  • springboot整合shiro(新手教程)

    咱们也就不多哔哔 直接开始 我先放我自己写的项目结构 第一步 想啥了 肯定是先创建一个springboot的项目 第二步 配置pom文件
  • vue3.0新增和删除的内容

    新增组件
  • 关于解决构建maven项目中报错:Failed to execute goal org.apache.maven.pluginsmaven-archetype-plugin

    1 首先进入仓库下面repositoryorgapachemavenplugins这个目录 2 删除目录下的maven archetype plugin文件夹 3 重新加载
  • Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)

    文章目录 1 前言 2 st line chart 绘制线状图 3 st area chart 绘制面积图 4 st bar chart 绘制柱状图 5 st pyplot 绘制自定义图表 6 结语 1 前言 在数据可视化的世界中 绘制清晰
  • 2022国赛15:Windows——文件共享

    试题内容 四 文件共享 任务描述 为了使局域网中的特定用户 能够访问共享文件夹内的 特定资源 请采用文件共享 实现共享资源的安全访问 1 在 windows1 创建用户主目录共享文件夹 本地目录为 D share home 共享名为 hom
  • React请求数据渲染页面

    1 使用react fetch数据发送请求 1 get方法 componentDidMount fetch url then res gt res json then json gt this setState list json 2 po
  • npm、pnpm、yarn的常用命令

    npm pnpm yarn的常用命令 文章目录 npm pnpm yarn的常用命令 一 常用命令 1 npm命令 2 pnpm命令 3 yarn命令 二 对比 一 常用命令 1 npm命令 npm init 初始化一个新的npm包 npm
  • 第12章 图形用户界面基础

    1 Swing和AWT的不同 AWT适合开发简单的图形用户界面 但不适合开发复杂的GUI项目 也容易发生于特定平台相关的故障 重量级组件 SWing更稳定 更通用 更灵活 不依赖于自己GUI 轻量级组件 SWing GUI组件类都以字母J为