[java/初学者/GUI编程]GUI界面设计——界面组件类

news2025/7/21 21:32:31


 前言

GUI,即图形用户界面,其英文全称是Graphics User Interface。

它是基于图形的界面,windows就是一个图形用户界面的操作系统,而DOS是基于命令提示符的操作系统,GUI编程就是编出一个图形用户界面的软件,它使用图形的方式,以菜单、按钮、表示、图文框等标准界面元素组成的用户操作界面。

所有的图形用户界面程序(GUI编程),都要解决以下两个方面的问题:

  1. 界面设计
  2. 事件处理

针对GUI编程,java提供的诸多的类,这些类都存在于两个包内。

java.awt包,简称AWT;

AWT包是sun最早推出的一套API,它需要利用本地操作系统所提供的图形库

  1. 属于重量级组件;
  2. 不能跨平台;
  3. 组件种类有限 ;

虽然可以提供最基本的GUI设计工具,但却无法实现目前GUI设计所需的所有功能; 

java.swing包,简称Swing;

Swing包是AWT包经过改进后推出的,并且由纯java语言编写

  1. 属于轻量级组件;
  2. 可跨平台;
  3. 提供了比AWT更加丰富的组件和功能,足以满足GUI设计的一切需求。

Swing会用到许多AWT的相关知识,例如AWT布局管理和AWT事件处理机制等。

经过以上段落,我们GUI编程应该有了一些了解,

本章就让我们学习一下GUI界面设计中的界面组件类吧!

Link Start!



 GUI界面设计包括界面元素的创建以及界面的布局

这个界面元素还有另一种叫法,那就是组件,在前言中我们提到,java的界面组件类在AWT包和Swing包中,其主要有:

  • 容器类组件
  • 非容器类组件
  • 菜单类组件等等

而页面的布局可以通过布局管理器类来实现,它也存在于AWT包和Swing包中,在实际编程中可以选用不同的布局管理器。

一、界面组件类

1、常用AWT组件

①:窗体容器类——Frame

Frame是最常用的容器之一,它是Window类的派生类,利用它可以创建一个带有标题栏、可选菜单条、最小化和关闭按钮、有边界的标准窗口。

一般将它作为图形用户界面的最外层的容器,它可以包含其他的容器或组件,但其他的容器不能包含它。

其构造方法如下:

Frame();
//创建一个无标题的窗口,该窗口的默认布局为BorderLayout

Frame(String title);
//创建一个标题为title的窗口,该窗口的默认布局为BorderLayout

常用方法如下:

public Component add(Compoent c)
//将组件c添加到容器中

public void setTitle(String s);
//设置窗口的标题为s

public void setSize(int width,int height);
//设置窗口的宽width和高height

public void setBounds(int a,int b,int width,int height);
//设置窗口出现在屏幕上的位置(a,b),以及窗口的宽width和高height

public void setResizable(boolean b);
//设置窗口在运行时是否可调整大小;默认是可调整大小的

public void setVisible(boolean b);
//设置窗口在运行时是否可见;默认是不可见的

System.exit(0);
//撤销所有的窗口

需要注意的是,Frame窗口在默认情况下是不可见的。

如若要让他显现出来,就必须调setVisible()方法或者show()方法。

下面是利用所示方法所编写的一个实例:

import java.awt.Frame;//导入包

public class Start extends Frame
{
    public static void main(String[]args)
    {
        Start frame=new Start();//创建对象
        frame.setBounds(400,200,500,200);//设置窗口的位置和大小
        frame.setTitle("Frame实例窗口");//设置窗口的标题
        frame.setVisible(true);//设置窗口为可见
    }
}

结果如图所示:

 ②:窗格容器类——Panel

Panel是一个较为简单的容器。

可以将其他的图形用户界面组件置于其上,或者放置另一个Panel(Panel嵌套)。

一般我们使用Panel把一些相关操作的组件组织起来,从而构建出操作简单、布局良好的用户界面。

虽然Panel类本身并没有多少方法,但其继承了Container和Component类的所有可用的方法。

其构造方法如下:

Panel();
//创建一个Panel对象,并使用默认的布局管理器BorderLayout摆放添加到窗格上的组件对象

Panel(LayoutManager layout);
//创建一个Panel对象,并使用layout所指定的布局管理器摆放添加到窗格上的组件对象

常用方法如下:

add(Component c)
//将组件c添加到窗格上

setLayout(LayoutManager layout)
//设置窗格的布局管理器为layout

setVisible(boolean b)
//设置窗格是否可见,默认是可见的

下面是利用所示方法所编写的一个实例:

import java.awt.*;//导入包
public class Ex11_3 extends Frame
{
    public static void main(String[] args) 
    {
        Ex11_3 frame =new Ex11_3();创建frame对象
        frame.setBounds(100,100,500,200); //设置窗口大小及其位置
        frame.setTitle("Frame实例窗口"); //窗口的标题

        Panel p1=new Panel();//创建窗格对象p1
        p1.setBackground(Color.blue);//设置p1的背景色为蓝色
        p1.setSize(200,80);//设置p1的大小

        Panel p2=new Panel();//创建窗格对象p2
        p2.setBackground(Color.red);//设置p2的背景色为红色
        p2.setSize(140,60);//设置p2的大小

        frame.setLayout(null);//设置窗口的布局为空布局
        frame.add(p1);//将p1添加到框架窗口上
        p1.setLayout(null);//设置p1的布局为null空布局

        p1.add(p2);//将p2添加到p1上
        frame.setVisible(true); //设置窗口为可见
    }
}

结果如图所示:

  ②:标签组件类——Label

标签是一种只能显示文本的组件,且内容不能被编辑。

一般用作标识或提示信息。

其构造方法如下:

Label();
//创建一个空的标签

Label(String text);
//创建一个标识内容为text的标签,text的内容左对齐显示

Label(String text,int alignment);
//创建一个标识内容为text的标签,
//text内容的显示对齐方式由alignment指定,alignment可以取类常数值

Label标签还提供了一些类常数,用于限定对齐方式的类常数如下:

  • Label.LEFT常数值为0,表示左对齐;
  • Label.CENTER常数值为1,表示居中对齐;
  • Label.RIGHT常数值为2,表示右对齐;

常用方法如下:

String getText()
//获取标签的标识内容

setText(String text)
//设置标签的标识内容为text

setVisiable(boolean b)
//设置标签是可见的

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

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

相关文章

昇思MindSpore时序AI SIG,共同提高序列大数据分析能力

随着信息产业技术的升级,产生了大规模的时间序列数据,长期并广泛存在于工业制造、航空航天、公共卫生、环境保护等关键基础领域。时间序列信息能够被充分理解、计算和利用,实现精准预测并辅助决策,是关系到国家竞争力的重要问题。…

Adaptive Cruise Control (ACC) Test Scenarios(PreScan里面的ACC)

文章目录Adaptive Cruise Control (ACC) Test Scenarios PreScan scenario models available with the ACC system ACC模型的几个预扫描场景可用: 真实生活场景–系统的典型用例 ISO测试协议 这些模型展示了如何使用PreScan对ADAS系统进行建模,并提供“…

Day 56 | 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇

583. 两个字符串的删除操作 解法一:直接求删除的步数 动态规划解题思路: ①确定dp数组以及下标含义 dp[i][j]:以下标i-1结尾的字符串s与下标j-1结尾的字符串t想要达到相等,所需要删除元素的最少次数。 ②确定递推公式 每次…

spring - AnnotationConfigApplicationContext启动之reader、scanner、register逻辑整理

前言 我们在使用spring framework时一般都喜欢按照以下方式写启动 AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class); 而我们的AnnotationConfigApplicationContext的内容如下 public AnnotationConfigAp…

长时间预测模型DLiner、NLiner模型(论文解读)

前言 今年发布8月份发布的一篇有关长时间序列预测(SOTA)的文章,DLiner、NLine在常用9大数据集(包括ETTh1、ETTh2、ETTm1、ETTm2、Traffic等)上MSE最低,模型单变量、多变量实验数据: 在计算资…

Appium学习日记(二)—— 入门学习(安装Appium和配置环境)

入门 1、安装 Node.js 进入nodejs的官网下载安装包安装,一路点击下一步就行。 安装完毕之后,打开命令行,输入:node -v;显示类似于v10.13.0的版本号信息则表示安装成功。 2、安装Appium以及相关环境配置 Appium可以通过两种方式之…

【Kafka】(1)基础知识汇总

TOC (1)Kafka简介 (1)简单介绍 Kafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理。既然是消息队列,那么Kafka也就拥有消息队列的相应的特性了。 &#xff0…

Python3 VSCode 配置

VSCode(全称:Visual Studio Code)是一款由微软开发的跨平台免费源代码编辑器。VSCode 开发环境非常简单易用,仅需要安装相关的插件进行简易的配置就可以与原有的python环境组成一套具有简单的代码调试运行的开发工具。对于轻量级的…

聚焦“碳中和”,成都超算中心牵手重庆大学唱好“成渝双城记”

为了积极稳妥推进碳达峰碳中和,加快成渝双城经济圈建设。重庆大学牵手国家超算成都中心和成都计算狗数据科技有限公司,开展了关于CO2电催化还原反应的路径计算工作,积极推动川渝两地实现产学研合作和成果落地转化,深入推进能源革命…

【C++】运算符重载

前言&#xff1a;本教程使用到的工具是vs2010&#xff1b; 目录 为什么要重载运算符&#xff1f; 运算符重载 重载就一定要吗&#xff1f; 重载后的运算符和普通运算符有什么区别&#xff1f; 总结 为什么要重载运算符&#xff1f; 先看代码&#xff1a; #include <…

腾讯实时股票数据接口怎么获取行情?

腾讯实时股票数据接口怎么获取行情&#xff1f;以五粮液为例&#xff0c;要获取最新行情&#xff0c;访问数据接口&#xff1a; 返回数据&#xff1a;v_sz000858"51~五 粮 液~000858~27.78~27.60~27.70~417909~190109~227800~27.78~492~27.77~332~27.76~202~27.75~334~27.…

做SEO为什么有的网站收录很难做?

刚开始做网站的时候&#xff0c;经常遇到网站收录难的问题。有时候一个月都没收录&#xff0c;急得还是忍不住。我困惑了很久。每天都在想是什么原因导致我的网站没有被收录&#xff0c;很无奈也很难过。那时候我还不知道搜索引擎的工作原理&#xff0c;也不知道从何入手。我像…

为什么我抓不到baidu的数据包

最近&#xff0c;有位读者问起一个奇怪的事情&#xff0c;他说他想抓一个baidu.com的数据包&#xff0c;体验下看包的乐趣。 但却发现“抓不到”&#xff0c;这就有些奇怪了。 我来还原下他的操作步骤。 首先&#xff0c;通过ping命令&#xff0c;获得访问百度时会请求哪个I…

[TypeScript]Vue/React子组件实例暴露方法

最近几个月都在用TS开发各种项目&#xff0c;框架有涉及到Vue3,React18等&#xff1b; 记录一下Vue/React组件暴露出变量/函数的方法的写法&#xff1b; Vue2 回顾一下Vue2 组件暴露出去方法&#xff0c;它并没有约束&#xff0c;写在methods里的方法都能被调用&#xff0c;da…

UNIAPP实战项目笔记38 购物车的添加商品到购物车功能

UNIAPP实战项目笔记38 购物车的加入购物车功能 通过mapGetters实现此功能 在 shopcart.vue中 使用mapGetters中的 addShopCart方法实现商品数量的增加 核心代码 detail.vue <template><view class"details"><!-- 商品图 --><swiper :indicator…

如何在 JavaScript 中使用三元运算符

随着 React 的版本更新&#xff0c;内置 Hooks 越来越多了。很多 Hook 可能你压根都没听说过。但是 useEffect 这个老牌 Hook&#xff0c;相信每个用 React 的同学应该熟悉。 不优雅的 useEffect 不过对很多刚接触 React 的人来说&#xff0c;使用 useEffect 非常容易出现无限…

figma对比sketch有什么优势和不足?

设计行业的工具层出不穷。在我看来&#xff0c;sketch它在一定程度上被颠覆了PS&#xff0c;如今sketch已成为许多设计团队的设计工具。 那么Figma相对于Sketch有哪些优点&#xff1f;有哪些不便&#xff1f;让我们从几个方面来了解一下。 两款软件非常适合创建UI和组件库。Ske…

【LeetCode】数组系列-双指针

一、双指针算法基本介绍 算法思想&#xff1a;在遍历对象的过程中&#xff0c;不是普通的使用单个指针进行访问&#xff0c;而是使用两个相同方向&#xff08;快慢指针&#xff09;或者相反方向&#xff08;对撞指针&#xff09;的指针进行扫描&#xff0c;从而达到相应的目的…

现代 React Web 开发实战——kanban实现卡片拖拽

前提摘要&#xff1a; 学习宋一玮 React 新版本 函数组件 &Hooks 优先 开篇就是函数组件Hooks 实现的效果如下&#xff1a; 学到第11篇了 照葫芦画瓢&#xff0c;不过老师在讲解的过程中没有考虑拖拽目标项边界问题&#xff0c;我稍微处理了下这样就实现拖拽流畅了 下面就…

Flink基础原理

一、Flink的概述 我感觉就是一个实时的流处理程序,可以实时的从数据源读取数据,然后根据设置好的一系列算法, 对数据进行处理,最终输出到目的存储介质&#xff08;数据库、缓存等&#xff09;中去,和jdk1.8里面的数据流处理很像, 也有并行流、map、fifter等处理。二、Flink的基…