GUI (java)

news2024/9/22 11:42:47

GUI

  • 一.GUI概念
  • 二.Swing概述
  • 三.容器组件
  • 四.常用容器
    • 1.窗体
      • (1) JFrame类的构造方法
      • (2) JFrame类的常用方法
    • 2.面板
      • (1)JPanel类的构造方法
      • (2)JPanel类的常用方法
  • 五.布局管理器
    • 1. FlowLayout 流式布局
      • (1)FlowLayout构造方法
    • 2.BorderLayout 边界布局
    • 3.GridLayout 网格布局
  • 六.常用组件
    • 1.标签(JLabel)
      • (1)JLabel的构造方法
      • (2)JLabel的常用方法
    • 2.单行文本(JTextField)
      • (1)JTextField的构造方法
      • (2)JTextFiled的常用方法
    • 3.多行文本框(JTextArea)
      • (1)JTextArea的构造方法
      • (2)JTextArea的常用方法
    • 4.密码框(JPasswordField)
      • 1.JPasswordField的构造方法
      • 2.JPasswordField的常用方法
    • 5.按钮(JButton)
      • 1.JButton的构造方法
      • 2.JButton的常用方法
    • 6.菜单栏组件
      • 1.菜单栏的构造方法
      • 2.菜单栏的普通方法
    • 7.菜单组件
      • 1.菜单的构造方法
      • 2.菜单的普通方法
    • 8.菜单项组件
      • 1.菜单项的构造方法
  • 七.效果展示
  • 八.事件处理
  • 九.对话框
    • 1.JOptionPane对话框
      • (1)showMessageDialog() 消息对话框
      • (2)showConfirmDialog() 确认对话框

一.GUI概念

GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好

二.Swing概述

Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同的行为。
Swing中的大部分组件类位于javax.swing包中.
Swing中的组件非常丰富,支持很多功能强大的组件
关于GUI组件的类都在Swing包里

三.容器组件

Java的图形用户界面的基本组成部分是组件,组件是一个以图形化的方式显示在屏幕上并能与用户进行交互的对象;

组件不能独立地显示出来,必须将组件放在一定的容器(container)中才
可以显示出来。

容器可以容纳多个组件,通过调用容器的add(Component comp)方法
向容器中添加组件。窗口(Frame)和面板(Panel)是最常用的两个容器。

四.常用容器

1.窗体

在java中提供JFrame类,用于在Swing程序中创建窗体

(1) JFrame类的构造方法

构造方法说明
JFrame()创建新窗体,该窗体初始化为不可见
JFrame(String title)创建新窗体,使用参数title指定标题,该窗体初始化为不可见

(2) JFrame类的常用方法

常用方法说明
void setSize(int width, int height)设置窗体大小,可以指定宽度和高度
void setVisible(boolean b)设置窗体为可见的或者不可见,默认不可见
void setTitle(String title)设置窗体标题
void setResizable(boolean resizable)设置窗体是否可以被拉长,默认为可以
void setLocation(int x,int y)设置窗体相对坐标原点的位置,默认为(0,0)左上角
void setLocationRelativeTo(null)使窗体位于屏幕正中间
void setDefaultCloseOperation(int operation)设置窗体关闭时程序的状态
void dispose()销毁当前窗体

2.面板

java中的Jpanel类,为我们提供了面板,因为我们有了窗体只是空架子,并不能在窗体上设置各种组件,而是在面板上,所以我们再创建一个窗体后紧接着要创建一个面板,在面板上设置各种组件

(1)JPanel类的构造方法

构造方法说明
JPanel()创建一个空面板,默认为流式布局
JPanel(LayoutManaer layout)创建带有指定布局的面板

(2)JPanel类的常用方法

常用方法说明
void setBackground(Color bg)设置面板的背景色,由参数bg指定颜色
void setLayout(LayoutManager mgr)设置面板的布局,参数是布局管理器
Component add(Component comp)往面板中添加一个组件

五.布局管理器

布局管理器就是在面板上布局组件时的格式,java中常用的布局管理器有三种,分别是FlowLayout(流式布局),BorderLayout(边界布局),GridLayout(网格布局)

1. FlowLayout 流式布局

FlowLayout布局管理器是流式布局管理器,它将组件按照从左到右、从上到下的顺序来安排,并在默认情况下使组件尽量居中放置。
在这里插入图片描述

(1)FlowLayout构造方法

构造方法说明
FlowLayout(FlowLayout.RIGHT,int hgap,int vgap)右对齐,设置水平组件距离和垂直组件距离
FlowLayout(FlowLayout.LEFT)左对齐,水平和垂直距离为默认值5
FlowLayout()组件默认为居中,水平和垂直距离为默认值5

2.BorderLayout 边界布局

BorderLayout布局只允许在容器内设置5个组件,这5个组件的位置是由BorderLayout类中的North、South、East、West和Center5个常量来确定的,他们对应着容器中的上下左右中,用法如下

this.add(new Button(“按钮”) ,BorderLayout.NORTH)
this.add(new Button(“按钮”) ,BorderLayout.CENTER)
this指的是当前面板,加入的可以是任意组件,不一定是按钮,也可以是一个面板

组件在BorderLayout中的大小都是可以改变的。一般情况下可以让中间区域大一些,而且可以只用其中几个区域

BorderLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中
(CENTER)五个区域,组件只能被添加到指定的区域

如不指定组件的加入部位,则默认加入到CENTER区

每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖

BorderLayout型布局容器尺寸缩放原则:
北、南两个区域在水平方向缩放
东、西两个区域在垂直方向缩放
中部可在两个方向上缩放
在这里插入图片描述

3.GridLayout 网格布局

GridLayout布局管理器是矩形网格,在网格中放置组件,每个网格的高度和宽度都相等,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的大小和创建网格的多少来确定的。其用法如下

this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格
this.add(new Button(“按钮"))

当组件数目大于网格数时,GridLayout保持行数不变而自动增加列数。

GridLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。

在 GridLayout 构造方法中指定分割的行数和列数
在这里插入图片描述

六.常用组件

1.标签(JLabel)

标签分为文本标签和图片标签,顾名思义是用来在面板上增加文字或图片信息.

在这里插入图片描述

(1)JLabel的构造方法

构造方法说明
JLabel()创建一个标签
JLabel(String text)创建一个带文本的标签
JLabel(Icon image)创建一个图像的标签

(2)JLabel的常用方法

常用方法说明
void setText(String text)设置标签上的文本
String getText()获得标签上的文本
setFont(new Font(“宋体”,Font.BOLD, 18))设置字体

2.单行文本(JTextField)

用来输入单行文本的文本框,不能输入回车
在这里插入图片描述

(1)JTextField的构造方法

构造方法说明
JTextField()创建一个空白文本框如上图
JTextField(String text)创建一个带内容的文本框
JTextField(String text, int columns创建一个带内容,并且指定列数的单行文本框

(2)JTextFiled的常用方法

常用方法说明
void setText(String text)设置文本框中的文本
String getText()获得文本框中的文本
void setEditable(boolean b)设置文本框是否可以编辑,默认可以编辑
setColumns(20);设置列数

3.多行文本框(JTextArea)

用来输入多行文本,可以输入回车换行

(1)JTextArea的构造方法

构造方法说明
JTextArea()创建一个空的文本域
JTextArea(String text)用指定文本初始化文本域
JTextArea(int rows, int columns)创建一个指定行数和列数的空文本域
JTextArea(String text,int rows, int columns)创建一个带文本,并指行数和列数的空文本域

(2)JTextArea的常用方法

常用方法说明
void setText(String text)设置文本域中的文本
String getText()获得文本域中的文本
void setFont(Font font)设置文本域中文本的字体
void setLineWrap(boolean wrap)是否自动换行,默认false

如果需要文本区自动出现滚动条,可将文本区对象放入滚动窗格(JScrollPane)中

JScrollPane scrollPane = new JScrollPane(txtArea);

add(scrollPane );

4.密码框(JPasswordField)

用于输入密码时不可见

1.JPasswordField的构造方法

构造方法说明
JPasswordField()创建一个空的密码框
JPasswordField(String text)创建一个带文本的密码框
JPasswordField(String text, int columns)创建一个带文本的密码框,并且可以规定列数

2.JPasswordField的常用方法

常用方法说明
char [] getPassword()获得密码框中的文本,存放在char数组中

5.按钮(JButton)

设置按钮组件

1.JButton的构造方法

构造方法说明
JButton(String text)创建一个带文本标签的按钮
JButton(Icon image)创建一个带图像标签的按钮

2.JButton的常用方法

常用方法说明
void setBackground(Color bg)设置按钮的背景色
void setEnabled(boolean b)设置启用(或禁用按钮),由参数b决定
void setToolTipText(String text)设置按钮的悬停提示信息

6.菜单栏组件

给面板上添加一些菜单栏

1.菜单栏的构造方法

构造方法说明
JMenuBar()创建一个菜单栏对象

2.菜单栏的普通方法

普通方法说明
add(menu)向菜单栏中添加菜单
setJMenuBar(menuBar)将菜单栏添加到窗口,这个方法要用窗体对象调用

7.菜单组件

1.菜单的构造方法

构造方法说明
JMenu(“菜单名称")创建一个菜单对象

2.菜单的普通方法

普通方法说明
add(menuItem)向菜单中添加菜单选项

8.菜单项组件

1.菜单项的构造方法

构造方法说明
JMenuItem(“菜单项名称");创建一个菜单项对象

七.效果展示

在这里插入图片描述
在这里插入图片描述

八.事件处理

我们在上面虽然做出了页面,但只是空壳子,点按钮不会触发任何效果,要想有效果,就要对事件源进行监视,从而进行相应的行为.

什么是事件源?
就是任何一个组件对象,要想让该组件对象做出响应,就要用监听器去监听

如何产生监听器?
每一个事件源都有一个addActionListener()方法,这个方法要给里面传入一个匿名内部类,即new ActionListen()对象,但 ActionListen()是一个接口,我们知道接口不能直接产生对象,正确的做法是新写一个类,让该类实现接口的方法,才生成该类对象,但这样做太麻烦,java引入了匿名内部类,new ActionListen()其实是new了一个没有名字的内部类,完整的代码如下

事件源对象.addActionListener(new ActionListener() {
// 事件处理
@Override
public void actionPerformed(ActionEvent e) {
//执行操作
}
});

这样就可以在点击相关组件从而产生对应的事件了
在这里插入图片描述

九.对话框

对话框就是在事件处理时,和用户进行交互的对话框,分为消息对话框和确认对话框

1.JOptionPane对话框

(1)showMessageDialog() 消息对话框

消息对话框一般用于提示用户出现了什么问题或错误

主要有五种消息类型,类型不同,图标不同:
ERROR_MESSAGE 错误消息提示
INFORMATION_MESSAGE 信息提示
WARNING_MESSAGE 警告提示
QUESTION_MESSAGE 问题提示
PLAIN_MESSAGE 简洁提示

如上述的账号密码为空就是警告提示

(2)showConfirmDialog() 确认对话框

确认对话框一般用于确认对象目前的操作是否继续往下执行

主要有四种消息类型,类型不同,图标不同:
DEFAULT_OPTION 默认选项
YES_NO_OPTION 是/否选项
YES_NO_CANCEL_OPTION 是/否/取消选项
OK_CANCEL_OPTION 确定/取消

在这里插入图片描述
这就是一个OK_CANCEL_OPTION 确定/取消,确认/取消对话框

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

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

相关文章

LangChain: 大语言模型的新篇章

本文介绍了LangChain框架,它能够将大型语言模型与其他计算或知识来源相结合,从而实现功能更加强大的应用。接着,对LangChain的关键概念进行了详细说明,并基于该框架进行了一些案例尝试,旨在帮助读者更轻松地理解LangCh…

Mycat【Mycat高级特性_搭建双主双从、Mycat分片技术_垂直拆分-分库 】(四)-全面详解(学习总结---从入门到深化)

目录 Mycat高级特性_搭建双主双从 Mycat分片技术_垂直拆分-分库 Mycat高级特性_搭建双主双从 环境准备 创建docker容器 #启动第一台 docker run -d -p 3350:3306 -e MYSQL_ROOT_PASSWORD123456 --namemaster1 mysql:5.7#启动第二台 docker run -d -p 3360:3306 -e MYSQL_R…

Qt自定义控件之动画文本

文章目录 前言一、动画文本的效果二、具体实现定义动画对象设置动画时长的实现设置text函数实现绘制代码设置字体函数 三、高级部分操作代码总结 前言 在 Qt 中,自定义控件可以让我们实现丰富的用户界面效果和交互体验。其中,动画文本是一种常见的效果&…

电路分析基础学习(上)第4章

李瀚荪版电分第二版 ----------------------------------------------------------------------------------------------------------------------------- 求单口网络的VCR 两大基本方法: 1.外接电流源求电压; 2.外接电压源求电流; ---…

Netty序列化算法参数调优

目录 一、扩展序列化算法 1、Java 2、Json 二、参数调优 1、CONNECT_TIMEOUT_MILLIS 2、SO_BACKLOG 3、ulimit-n 4、TCP_NODELAY 5、SO_SNDBUF & SO_RCVBUF 6、ALLOCATOR 7、RCVBUF_ALLOCATOR 一、扩展序列化算法 1、Java 我们先写Java中jdk的序列方式&#x…

RabbitMQ系列(28)--RabbitMQ使用Federation Queue(联邦队列)解决异地访问延迟问题

前言: 联邦队列可以在多个Broker节点(或者集群)之间为单个队列提供均衡负载的功能。一个联邦队列可以连接一个或者多个上游队列(upstream queue),并从这些上游队列中获取消息以满足本地消费者消费消息的需求。 1、Federation Queue工作原理图 2、添加策…

Oracle19c默认用户名system密码不正确不能登录问题解决

Oracle19c默认用户名system密码不正确不能登录问题解决 1、oracle 命令乱码问题 oracle乱码问题一般是由于oracle字符集设置和操作系统字符集设置不一致造成的。 查看oracle字符集方式如下: 1.进入sqlplus 命令: sqlplus /nolog2.以系统管理员身份连…

【Git原理与使用】-- 企业级开发模型

目录 引入 系统开发环境 Git 分支设计规范 master 分支 release 分支 develop 分支 feature 分支 hotfix 分支 开发场景 - 基于git flow模型的实践 DevOps研发平台 修复测试环境 Bug 修改预发布环境 Bug 修改正式环境 Bug 紧急修复正式环境 Bug 拓展实践 都说&a…

java的RSA加密解密示例

RSA算法是一种非对称加密算法,公钥和私钥都可以用于加密和解密操作。在RSA算法中,公钥用于加密数据,私钥用于解密数据。 具体来说,使用公钥加密的数据只能使用相应的私钥进行解密。而使用私钥加密的数据则可以使用相应的公钥进行…

【云原生|云计算系列】云计算基础概念

欢迎来到云原生专题的云计算系列第一篇博客,我们将探索云计算的基础知识,以帮助您深入了解这个迅速发展的领域。在前一篇博客中,我们介绍了云原生的概念和重要性,强调了它作为云计算的核心理念和实践的关键角色。本篇博客将进一步…

基于单片机智能水杯 保温杯 定时提醒喝水 温度控制的设计与实现

功能介绍 以51单片机作为主控系统;LCD1602液晶显示当前水温,定时提醒,水量变化DS18B20检测当前水体温度;水位传感器检测当前水位;继电器驱动加热片进行水温加热;定时提醒喝水,蜂鸣器报警&#x…

Vue + Volo.Abp 实现OAuth2.0客户端授权模式认证

文章目录 注册ClientOAuth2.0授权创建vue-oidc-client创建OAuth2.0认证跳转获取令牌创建回调页面创建退出登录 最终效果 Volo.Abp的 身份服务器模块默认使用 IdentityServer4实现身份认证。 IdentityServer4是一个开源的OpenID Connect和OAuth 2.0框架,它实现了这…

第41节:cesium 闪烁效果-熊出没(含源码+视频)

结果示例: 点的闪烁:1.逐渐放大后消失;2.点闪烁。 图的闪烁:熊出没,含自定义显示文字效果。 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false">

在当今这个信息时代,互联网中的隐私越来越重要,究竟是隐私换便利还是花钱护隐私呢?

一、互联网生存指南&#xff1a;通过哪些方法来加强个人信息保护&#xff1f; 网上注册内容时不要填写个人私密信息&#xff1a;互联网时代用户数和用户信息量已然和企业的盈利关联了起来&#xff0c;企业希望尽可能多地获取用户信息。但是很多企业在数据保护上所做的工作存在缺…

java.lang.IllegalArgumentException: Not a managed type

说在前面 真的哭死&#xff0c;全网所有报错都试过&#xff0c;都不是我的问题。解决之后太舒服了&#xff01; 第一个报错 首先&#xff0c;报错没有 TableGenerators 这个类&#xff0c;去 Jar 包看了一下还真没有。 这个类在 Javax 包的 2.2 版本有&#xff0c;添加如下…

Linux 网络延迟排查方法详解

概要 在 Linux 服务器中&#xff0c;可以通过内核调优、DPDK 以及 XDP 等多种方式提高服务器的抗攻击能力&#xff0c;降低 DDoS 对正常服务的影响。在应用程序中&#xff0c;可以使用各级缓存、WAF、CDN 等来缓解 DDoS 对应用程序的影响。 但是需要注意的是&#xff0c;如果 …

easyexcel 自定义列的导出

公司最近有个需求 就是将day这一列 变为excel表格表头&#xff0c;然后列显示薪水。 然后再到网上找教程最终终于找到相关的大神写的博客&#xff0c;具体网址忘记了。抱歉。现在写下具体教程。 ExcelHead 代码 import lombok.Data;/*** author hunterhou* date 2023/2/28 10:…

[分块][STL][树]【Centroids】不一样的解法

前言 一道好题&#xff0c;也就花了我一个下午而已。 本人做法比较清奇&#xff0c;可以当做开阔思路参考&#xff0c;并不太建议实操&#xff08;太难调了&#xff01;&#xff09;。 文章较啰嗦&#xff0c;谅解。 思路 众所周知&#xff0c;我并不太喜推式子&#xff0…

37.RocketMQ之Broker消息存储源码分析

highlight: arduino-light 消息存储文件 rocketMQ的消息持久化在我们在搭建集群时都特意指定的文件存储路径,进入指定的store目录下就可以看到。 下面介绍各文件含义 CommitLog 存储消息的元数据。produce发出的所有消息都会顺序存入到CommitLog文件当中。 CommitLog由多个文件…

javassist implements interface 模拟mybatis 生成代理类

动态创建代理对象的工具类 package com.wsd.util;import org.apache.ibatis.javassist.ClassPool; import org.apache.ibatis.javassist.CtClass; import org.apache.ibatis.javassist.CtMethod; import org.apache.ibatis.session.SqlSession;import java.lang.reflect.Const…