Java之GUI简单介绍

article/2025/11/1 6:12:54

GUI介绍(一)常见的组件及简单监听器

  • 第一个窗口程序
  • 容器控件
  • JLabel控件
  • 简单事件处理
  • 文本框JTextFiled
  • 复选框JCheckBox
  • 下拉列表JComboBox
  • 布局管理器LayoutManager
    • 边界布局管理器BorderLayout
    • 手工布局

前段时间学了GUI,总体上概念还是有点模糊,于是决定花点时间简单整理下。先简单介绍一下GUI,GUI就是图形用户界面。

Java提供了GUI相关的两个API:分别是AWT、Swing。
AWT是最早提供的GUI库,依赖本地平台,界面不好看,功能有限。之后推出了Swing,Swing并没有完全替代AWT,而是建立在AWT的拓展,是轻量级的界面设计库。
废话不多说,开始上代码!

第一个窗口程序

	public class MyDemo {public static void main(String[] args) {//JFrame指一个窗口JFrame frame=new JFrame("窗口案例");//关闭窗口时退出程序frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//调整窗口大小frame.setSize(400,300);//显示窗口(放到程序后面,否则窗口可能显示不出来)frame.setVisible(true);}}

因为这个窗口啥也没有,效果就是这样式的
在这里插入图片描述

容器控件

当我们需要在窗口里边添加控件时,我们用到JPanel和JButton 其中JPanel表示一个容器,也称为面板。
JButton表示一个按钮控件 我们需要向窗口里边添加一个容器JPanel,然后在向容器内添加控件 ,还是刚刚MyDemo类,我们添加如下代码。

		//创建一个面板JPanel panel=new JPanel();//将面板添加到窗口中frame.setContentPane(panel);//添加按钮JButton button=new JButton("测试");panel.add(button);

这时就有了一个按钮组件了
在这里插入图片描述

JLabel控件

JLabel是标签控件,显示单行文本,其中相关的方法可见代码中的注释。

//继续在MyDemo类添加
JLabel label=new JLabel("java 你好!");
panel.add(label);

在这里插入图片描述
常见的方法测试如下

public class MyFrame extends JFrame{public MyFrame(String title) {super(title);//创建一个面板JPanel panel=new JPanel();//将面板添加到窗口中this.setContentPane(panel);//添加按钮JButton button=new JButton("测试");panel.add(button);JLabel label=new JLabel("JLabel标签测试");//设置字体label.setFont(new Font("微软雅黑",Font.PLAIN,14));//设置文字颜色label.setForeground(new Color(100,200,50));//设置背景色label.setOpaque(true);//背景色默认透明显示,设置不透明label.setBackground(new Color(100,30,100));//设置控件大小label.setPreferredSize(new Dimension(150, 30));//Dimension指定高度、宽度//设置文本居中对齐label.setHorizontalAlignment(SwingConstants.CENTER);panel.add(label);}
}

在这里插入图片描述

(ps:这里写了一个Myframe类继承Frame类,主要写控件的操作,下面的如果没有特别提示的话都是在Myframe类里面写的!)

简单事件处理

事件处理使用的是监听机制
步骤:
1、添加一个监听器类,实现ActionListener接口
2、设置监听器>
3、将监听器对象传给控件

Main方法所在的类如下
public class MyDemo {public static void main(String[] args) {//JFrame指一个窗口MyFrame frame=new MyFrame("窗口测试");//关闭窗口时退出程序frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		//调整窗口大小frame.setSize(400,300);//显示窗口(放到程序后面,否则窗口可能显示不出来)frame.setVisible(true);}
}
监听事件所在的类
public class MyFrame extends JFrame{public MyFrame(String title) {super(title);//创建一个面板JPanel panel=new JPanel();//将面板添加到窗口中this.setContentPane(panel);//添加按钮JButton button=new JButton("测试");button.addActionListener(new MyactionListener());panel.add(button);JLabel label=new JLabel("java 你好!");panel.add(label);}private class MyactionListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("按钮被点击了!");				}			}
}

当点击按钮时,触发监听事件,控制台输出如下

在这里插入图片描述
练习:点击按钮,获取当前时间(使用SimpleDateFormat类获取当前时间)

public class MyFrame extends JFrame {JLabel timeJLabel = new JLabel("00:00:00");// 作为Myframe的属性,使内部类能够访问public MyFrame(String title) {super(title);// 创建一个面板JPanel panel = new JPanel();// 将面板添加到窗口中this.setContentPane(panel);// 添加按钮JButton button = new JButton("测试");button.addActionListener(new MyactionListener());panel.add(button);panel.add(timeJLabel);}private class MyactionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {SimpleDateFormat sdf = new SimpleDateFormat("HH:MM:SS");String str = sdf.format(new Date());// 获取当前时间转化位字符串timeJLabel.setText(str);}}
}

效果如下
在这里插入图片描述

文本框JTextFiled

JTextFiled的相关的两个方法是setText(str)和getText()
添加监听事件,实现内容输出

public class MyFrame extends JFrame {JTextField jField = new JTextField(20);JButton button = new JButton("点我");JTextField jField2 = new JTextField(20);public MyFrame(String title) {super(title);// 创建一个面板JPanel panel = new JPanel();// 将面板添加到窗口中this.setContentPane(panel);jField.setText("我是一个文本框");button.addActionListener(new ButtonActionListener());panel.add(jField);panel.add(button);panel.add(jField2);}public class ButtonActionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {test();}}public void test() {String str = jField.getText();jField2.setText(str);}
}

效果如下
在这里插入图片描述

复选框JCheckBox

JCheckBox相关的方法
setSelected(true/false)设置选中状态
isSelect()是否选中
addActionListener()勾选或取消获取事件

public class MyFrame extends JFrame {JCheckBox agreeBox = new JCheckBox("同意用户协议");JCheckBox agreeBox1 = new JCheckBox("取消");JButton nextButton = new JButton("下一步");public MyFrame(String title) {super(title);// 创建一个面板JPanel panel = new JPanel();// 将面板添加到窗口中this.setContentPane(panel);panel.add(agreeBox);panel.add(agreeBox1);panel.add(nextButton);}
}

效果如下
在这里插入图片描述
练习:添加功能,当复选框没有选择时,默认按钮是不可选的,既无法进行下一步操作,当选中“同意用户协议后“,会弹出对话信息框。

public class MyFrame extends JFrame {JCheckBox agreeBox = new JCheckBox("同意用户协议");JCheckBox agreeBox1 = new JCheckBox("取消");JButton nextButton = new JButton("下一步");JPanel panel = new JPanel();public MyFrame(String title) {super(title);// 将面板添加到窗口中this.setContentPane(panel);panel.add(agreeBox);panel.add(agreeBox1);panel.add(nextButton);// 界面初始化nextButton.setEnabled(false);// 给CheckBox添加事件处理agreeBox.addActionListener(new CheckBoxListener());nextButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(panel, "欢迎!");}});}public class CheckBoxListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {if (agreeBox.isSelected()) {nextButton.setEnabled(true);} elsenextButton.setEnabled(false);}}
}

效果如下
点击前
在这里插入图片描述
点击后
在这里插入图片描述

下拉列表JComboBox

JComboBox colorFiled=new JComboBox<>();
JComboBox是一个泛型,参数类型T表示的是数据项的类型
数据项
addItem() 添加数据项
getItemCount()获取数据项个数
getItemAt(index)获取数据项

按索引访问
getSelectedIndex()获取选中项的索引
setSelectedIndex()设置选中项
remove(index)删除索引

按数据项访问
getSelectedItem() 获取数据项
setSelectedItem()设置数据项
remove(item)删除

public class MyFrame extends JFrame{JComboBox<String> colorBox=new JComboBox<String>();public MyFrame(String title) {super(title);//创建一个面板JPanel panel=new JPanel();//将面板添加到窗口中this.setContentPane(panel);//下拉列表	colorBox.addItem("红色");colorBox.addItem("绿色");colorBox.addItem("蓝色");panel.add(colorBox);//测试按钮JButton testButton=new JButton("测试");panel.add(testButton);testButton.addActionListener(new testButtonListener());}public class testButtonListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {test();}}public void test() {//获取个数Object a=colorBox.getSelectedItem();int count=colorBox.getItemCount();String value=colorBox.getItemAt(0);System.out.println("数据项个数:"+count+"索引值:"+value);System.out.println(a);}
}

控制台输出
在这里插入图片描述

布局管理器LayoutManager

当把控件添加到窗口后,由布局管理器对每一个子控件进行布局。
默认JPanel自带一个FlowLayout流式布局器,就是流水线一样从左到右,从上到下进行布局。

边界布局管理器BorderLayout

BorderLayout将容器分为东、西、南、北、中5个区域,然后每个区域来放置子控件

public class MyFrame extends JFrame{public MyFrame(String title) {super(title);//创建一个面板JPanel panel=new JPanel();//将面板添加到窗口中this.setContentPane(panel);//设置布局器BorderLayout borderLayout=new BorderLayout();panel.setLayout(borderLayout);ColorLabel cLabel1=new ColorLabel("东", Color.YELLOW);ColorLabel cLabel2=new ColorLabel("南", Color.GREEN);ColorLabel cLabel3=new ColorLabel("西", Color.LIGHT_GRAY);ColorLabel cLabel4=new ColorLabel("北", Color.cyan);ColorLabel cLabel5=new ColorLabel("中", Color.red);panel.add(cLabel1,borderLayout.EAST);panel.add(cLabel2,borderLayout.SOUTH);panel.add(cLabel3,borderLayout.WEST);panel.add(cLabel4,borderLayout.NORTH);panel.add(cLabel5,borderLayout.CENTER);}public static class ColorLabel extends JLabel {public ColorLabel(String text,Color color) {this.setText(text);this.setOpaque(true);this.setBackground(color);this.setPreferredSize(new Dimension(60,30));this.setHorizontalAlignment(SwingConstants.CENTER);}}
}

显示效果如下
在这里插入图片描述

手工布局

1、不使用布局器 panel.setLayout(null);
2、添加某个子控件 panel.add(a1)
3、指定子控件的位置大小,a1.setBounds(x,y,w,h)(x、y表示坐标,w、h表示宽度和高度)

public class MyFrame extends JFrame{public MyFrame(String title) {super(title);//创建一个面板JPanel panel=new JPanel();//将面板添加到窗口中this.setContentPane(panel);//设置布局器		panel.setLayout(null);ColorLabel cLabel1=new ColorLabel("我要呆在中间", Color.YELLOW);cLabel1.setBounds(100,40,150,180);panel.add(cLabel1);}public static class ColorLabel extends JLabel {public ColorLabel(String text,Color color) {this.setText(text);this.setOpaque(true);this.setBackground(color);this.setPreferredSize(new Dimension(60,30));this.setHorizontalAlignment(SwingConstants.CENTER);}}
}

显示效果如下
在这里插入图片描述
缺点:当窗口放大或缩小时,自定义布局不能自适应大小


http://chatgpt.dhexx.cn/article/OyJ2A87A.shtml

相关文章

JAVA GUI(图形用户界面)

1.GUI概述 目前,我们编写的程序都是基于控制台的程序GUI&#xff08;Graphical User Interface&#xff09;即图形用户界面&#xff0c;它能够使应用程序看上去更加友好 2.Swing概念 位于javax.swingSwing是纯java组件,使得应用在不同平台中有相同的外观和行为 3.什么是组件,…

Java——GUI(图形用户界面)

学习目标&#xff1a; 1、掌握布局管理器、AWT事件处理机制以及常用事件 2、熟悉Swing组件的使用 3、了解GUI开发的相关原理和技巧 GUI全称是GraphicalUser Interface&#xff0c;即图形用户界面。顾名思义&#xff0c;就是应用程序提供给用户操作的图形界面&#xff0c;包括…

Java GUI——Java图形用户界面

Java GUI——Java图形用户界面 1、Java GUI概述 1.1、GUI的前世今生 早期&#xff0c;电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面&#xff08;CLI&#xff09;”。如&#xff1a;Windows中的DOS窗口。后来&#xff0c;Apple公司率先在电脑的操作系统中实现了图…

APIGateway 简介

1. APIGateway是什么 APIGateway 即API网关&#xff0c;所有请求首先会经过这个网关&#xff0c;然后到达后端服务&#xff0c;有点类似于Facade模式。API网关作为系统接口对外的统一出口&#xff0c;可以减少调用方对服务实现的感知。 没有API网关时的结系统构如下图&#xff…

aws api gateway 创建一个REST API作为Amazon S3代理

你可能想把样本API导入为Amazon S3的代理&#xff0c;如样本API作为Amazon S3代理的OpenAPI定义所示。关于如何使用OpenAPI定义导入API的说明&#xff0c;请参阅使用OpenAPI配置REST API。 创建API资源来代表Amazon S3资源 我们将使用API的根&#xff08;/&#xff09;资源作…

【AWS系列】第七讲: AWS Serverless之API Gateway

目录 序言 一、基本介绍 1.1 RESTful API 1.2 HTTP API 1.3 WebSocket API 2、使用介绍 2.1 新建 2.2 选类型 2.3 点击构建 2.4 输入参数 2.5 点击创建 2.6 新建方法 2.6 方法测试 三、总结 序言 初步研究一下API Gateway&#xff0c;加油 一、基本介绍 Amazon AP…

一文搞懂 Service Mesh 和 API Gateway 关系和区别

公众号关注 「奇妙的 Linux 世界」 设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; 关于Service Mesh和API Gateway之间的关系&#xff0c;这个问题过去两年间经常被问起&#xff0c;社区也有不少文章和资料给出解答。其中不乏 Christian Posta 这样的网红给出过深度…

aws api gateway 构建一个私有的REST API

你将创建一个私有的REST API。客户只能从你的亚马逊VPC内访问该API。该API与公共互联网隔离&#xff0c;这是一个常见的安全要求。 首先&#xff0c;你使用AWS CloudFormation模板来创建一个亚马逊VPC、一个VPC端点、一个AWS Lambda函数&#xff0c;并启动一个亚马逊EC2实例&am…

AWS Lambda 搭配 Amazon API Gateway (REST API)

AWS Lambda 搭配 Amazon API Gateway (REST API) AWS Lambda 是一种无伺服器、事件推动的运算服务&#xff0c;而 Amazon API Gateway 可以让开发人员轻松地建立、发布、维护、监控和保护任何规模的 API&#xff0c;使用 API Gateway 可以建立 RESTful API 和 WebSocket API&a…

AWS API Gateway与AWS Lambda代理集成构建REST API

项目地址 https://github.com/JessicaWin/aws lambda分支为自动创建API Gateway REST API资源的部署方式apigateway分支为自定义API Gateway REST API资源的部署方式 创建Lambda Handler 创建父模块 使用idea创建一个maven工程: File->New->Project 在左侧菜单栏中…

基于 Amazon API Gateway 的跨账号跨网络的私有 API 集成

一、背景介绍 本文主要讨论的问题是在使用 Amazon API Gateway&#xff0c;通过 Private Integration、Private API 来完成私有网络环境下的跨账号或跨网络的 API 集成。API 管理平台会被设计在单独的账号中(亚马逊云科技提供的是多租户的环境)&#xff0c;因为客观上不同业务…

AWS Lambda 搭配 Amazon API Gateway (HTTP API)

AWS Lambda 搭配 Amazon API Gateway (HTTP API) AWS Lambda 是一种无伺服器、事件推动的运算服务&#xff0c;而 Amazon API Gateway 可以让开发人员轻松地建立、发布、维护、监控和保护任何规模的 API&#xff0c;使用 API Gateway 可以建立 RESTful API 和 WebSocket API&a…

AWS API gateway api CORS错误处理方法

我们开发了一个 AWS lambda 函数&#xff0c;然后我们使用 AWS API gateway服务将它上线。 我们已经测试 API 并验证它是否按照我们的预期工作&#xff0c;看起来真的很棒。 现在我们准备好将 API 端点发送到我们的前端并从网站调用它。 一旦我们这样做了&#xff0c;我们就…

API管理的正确姿势--API Gateway

转载本文需注明出处&#xff1a;微信公众号EAWorld&#xff0c;违者必究。 数字化生态&#xff0c;以创新客户体验为核心&#xff0c;所有我们身边能感知到的变化都来自于渐近的创新。这些创新需要试错&#xff0c;需要不断的升级&#xff0c;并且创新往往与我们熟知的功能分离…

AWS——API Gateway

文章目录 APIHTTP API构建操作*路由*授权集成部署——阶段 REST API构建操作*资源*阶段授权方 自定义域名ACM证书&#xff1f;API 映射 VPC链接REST APIHTTP API子网&#xff1f;安全组&#xff1f; API 选择创建API的类型时&#xff0c;创建的是对公访问的gateway方式&#x…

使用AWS的API Gateway实现websocket

问题 最近业务上面需要使用到WebSocket长连接来解决某些业务场景。 一图胜千言 注意&#xff1a;这里承担WebSocket服务器的是AWS API Gateway&#xff1b;后面的EC2业务服务&#xff0c;其实都是REST接口服务。 这里主要关注API Gateway和REST业务服务怎么实现API Gateway要…

使用API Gateway

使用API Gateway 转自&#xff1a;http://www.open-open.com/lib/view/open1436089902667.html 它讨论了采用微服务的优点和缺点&#xff0c;除了一些复杂的微服务&#xff0c;这种模式还是复杂应用的理想选择。 当你决定将应用作为一组微服务时&#xff0c;需要决定应用客户端…

aws api gateway 创建

在这个章节中&#xff0c;你将创建一个无服务器API。无服务器API让你专注于你的应用&#xff0c;而不是花时间配置和管理服务器。 首先&#xff0c;你使用AWS Lambda控制台创建一个Lambda函数。接下来&#xff0c;你使用API网关控制台创建一个HTTP API。然后&#xff0c;你调用…

微服务实践(二):使用API Gateway

【编者的话】本系列的第一篇介绍了微服务架构模式。它讨论了采用微服务的优点和缺点&#xff0c;除了一些复杂的微服务&#xff0c;这种模式还是复杂应用的理想选择。 点击这里获取云原生干货 当你决定将应用作为一组微服务时&#xff0c;需要决定应用客户端如何与微服务交互。…

AWS API GATEWAY的使用

AWS API GATEWAY 文章目录 1、Create Vpc endpoint2、Target Groups与Load Balancer2.1、Create target type为Instances的Target Groups2.2、Create Application Load Balancer2.3、Create target type为Application Load Balancer的Target Groups2.4、Create Network Load Ba…