当前位置: 首页 > news >正文

Java GUI编程

引言

图形用户界面(GUI)编程是使应用程序与用户进行交互的重要部分。Java提供了多种用于GUI开发的工具和库,最常用的是Swing和AWT。本文将详细介绍Java GUI编程的基础知识,包括Swing和AWT框架、事件处理以及高级GUI组件的使用,并通过表格进行总结和示范。

Swing框架

Swing是Java提供的一组用于创建图形用户界面的类库。它基于AWT(Abstract Window Toolkit),但比AWT功能更丰富、更灵活。

Swing组件

Swing提供了一系列组件,如JFrameJButtonJLabel等,用于创建各种GUI元素。

示例:创建一个简单的Swing应用程序

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;public class SimpleSwingApp {public static void main(String[] args) {// 创建主窗口JFrame frame = new JFrame("Simple Swing Application");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);// 创建面板JPanel panel = new JPanel();// 创建标签和按钮JLabel label = new JLabel("Hello, Swing!");JButton button = new JButton("Click Me");// 将组件添加到面板panel.add(label);panel.add(button);// 将面板添加到主窗口frame.add(panel);// 显示窗口frame.setVisible(true);}
}

常用Swing组件表

组件描述示例代码
JFrame主窗口框架,包含其他组件JFrame frame = new JFrame("Title");
JPanel用于组织和管理其他组件的容器JPanel panel = new JPanel();
JLabel显示文本或图像的标签JLabel label = new JLabel("Text");
JButton可点击的按钮JButton button = new JButton("Click Me");
JTextField单行文本输入框JTextField textField = new JTextField(20);
JTextArea多行文本输入框JTextArea textArea = new JTextArea(5, 20);
JComboBox下拉选择框JComboBox<String> comboBox = new JComboBox<>(new String[]{"Item1", "Item2"});
JCheckBox复选框JCheckBox checkBox = new JCheckBox("Check Me");

AWT框架

AWT是Java的原始GUI工具包,提供了基本的GUI组件和绘图功能。虽然Swing大部分取代了AWT,但AWT仍然用于低层次的图形编程和与原生系统资源的交互。

AWT组件

AWT组件包括FrameButtonLabel等,与Swing组件类似,但功能简单一些。

示例:创建一个简单的AWT应用程序

import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;public class SimpleAWTApp {public static void main(String[] args) {// 创建主窗口Frame frame = new Frame("Simple AWT Application");frame.setSize(400, 300);// 创建面板Panel panel = new Panel();// 创建标签和按钮Label label = new Label("Hello, AWT!");Button button = new Button("Click Me");// 将组件添加到面板panel.add(label);panel.add(button);// 将面板添加到主窗口frame.add(panel);// 显示窗口frame.setVisible(true);}
}

常用AWT组件表

组件描述示例代码
Frame主窗口框架,包含其他组件Frame frame = new Frame("Title");
Panel用于组织和管理其他组件的容器Panel panel = new Panel();
Label显示文本或图像的标签Label label = new Label("Text");
Button可点击的按钮Button button = new Button("Click Me");
TextField单行文本输入框TextField textField = new TextField(20);
TextArea多行文本输入框TextArea textArea = new TextArea(5, 20);
Choice下拉选择框Choice choice = new Choice(); choice.add("Item1"); choice.add("Item2");
Checkbox复选框Checkbox checkBox = new Checkbox("Check Me");

事件处理

事件处理是GUI编程的核心,用于响应用户的操作,如点击按钮、输入文本等。Java提供了事件处理机制,通过监听器接口处理各种事件。

使用ActionListener处理按钮点击事件

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class EventHandlingApp {public static void main(String[] args) {// 创建主窗口JFrame frame = new JFrame("Event Handling Application");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);// 创建按钮JButton button = new JButton("Click Me");// 添加按钮点击事件监听器button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(frame, "Button clicked!");}});// 添加按钮到窗口frame.add(button);// 显示窗口frame.setVisible(true);}
}

常用事件监听器接口表

监听器接口描述示例代码
ActionListener处理动作事件,如按钮点击button.addActionListener(e -> { ... });
KeyListener处理键盘事件textField.addKeyListener(new KeyAdapter() { ... });
MouseListener处理鼠标事件panel.addMouseListener(new MouseAdapter() { ... });
WindowListener处理窗口事件,如窗口打开、关闭frame.addWindowListener(new WindowAdapter() { ... });

高级GUI组件

JTable

JTable用于显示和编辑二维表格数据。

示例:使用JTable显示表格数据

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;public class TableExample {public static void main(String[] args) {// 创建主窗口JFrame frame = new JFrame("JTable Example");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(500, 300);// 表格数据Object[][] data = {{"John", 28, "Engineer"},{"Anna", 24, "Teacher"},{"Mike", 32, "Designer"}};// 表头String[] columnNames = {"Name", "Age", "Occupation"};// 创建表格JTable table = new JTable(data, columnNames);// 将表格添加到滚动面板JScrollPane scrollPane = new JScrollPane(table);frame.add(scrollPane);// 显示窗口frame.setVisible(true);}
}

JTree

JTree用于显示分层数据,如文件系统结构。

示例:使用JTree显示树形数据

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;public class TreeExample {public static void main(String[] args) {// 创建主窗口JFrame frame = new JFrame("JTree Example");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 400);// 创建根节点DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");// 创建子节点DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Child 1");DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("Child 2");// 添加子节点到根节点root.add(child1);root.add(child2);// 创建树JTree tree = new JTree(root);// 将树添加到滚动面板JScrollPane scrollPane = new JScrollPane(tree);frame.add(scrollPane);// 显示窗口frame.setVisible(true);}
}

JTabbedPane

JTabbedPane用于创建选项卡界面,可以容纳多个选项卡,每个选项卡包含不同的内容。

示例:使用JTabbedPane创建选项卡界面

java

Copy

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JLabel;public class TabbedPaneExample {public static void main(String[] args) {// 创建主窗口JFrame frame = new JFrame("JTabbedPane Example");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);// 创建选项卡面板JTabbedPane tabbedPane = new JTabbedPane();// 创建选项卡JPanel tab1 = new JPanel();tab1.add(new JLabel("This is Tab 1"));tabbedPane.addTab("Tab 1", tab1);JPanel tab2 = new JPanel();tab2.add(new JLabel("This is Tab 2"));tabbedPane.addTab("Tab 2", tab2);// 将选项卡面板添加到窗口frame.add(tabbedPane);// 显示窗口frame.setVisible(true);}
}

JSplitPane

JSplitPane用于在一个窗口中分割两个组件,可以水平或垂直分割。

示例:使用JSplitPane创建分割面板

java

Copy

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JLabel;public class SplitPaneExample {public static void main(String[] args) {// 创建主窗口JFrame frame = new JFrame("JSplitPane Example");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);// 创建左侧面板和右侧面板JPanel leftPanel = new JPanel();leftPanel.add(new JLabel("Left Panel"));JPanel rightPanel = new JPanel();rightPanel.add(new JLabel("Right Panel"));// 创建分割面板JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel);splitPane.setDividerLocation(150); // 设置分割位置// 将分割面板添加到框架frame.add(splitPane);// 显示窗口frame.setVisible(true);}
}

高级GUI组件表格总结

组件描述示例代码
JTable用于显示和编辑二维表格数据的组件JTable table = new JTable(data, columnNames);
JTree用于显示分层数据的树形结构组件JTree tree = new JTree(root);
JTabbedPane用于创建选项卡界面的组件JTabbedPane tabbedPane = new JTabbedPane();
JSplitPane用于在一个窗口中分割两个组件的组件JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel);

表格总结

常用Swing组件表

组件描述示例代码
JFrame主窗口框架,包含其他组件JFrame frame = new JFrame("Title");
JPanel用于组织和管理其他组件的容器JPanel panel = new JPanel();
JLabel显示文本或图像的标签JLabel label = new JLabel("Text");
JButton可点击的按钮JButton button = new JButton("Click Me");
JTextField单行文本输入框JTextField textField = new JTextField(20);
JTextArea多行文本输入框JTextArea textArea = new JTextArea(5, 20);
JComboBox下拉选择框JComboBox<String> comboBox = new JComboBox<>(new String[]{"Item1", "Item2"});
JCheckBox复选框JCheckBox checkBox = new JCheckBox("Check Me");

常用AWT组件表

组件描述示例代码
Frame主窗口框架,包含其他组件Frame frame = new Frame("Title");
Panel用于组织和管理其他组件的容器Panel panel = new Panel();
Label显示文本或图像的标签Label label = new Label("Text");
Button可点击的按钮Button button = new Button("Click Me");
TextField单行文本输入框TextField textField = new TextField(20);
TextArea多行文本输入框TextArea textArea = new TextArea(5, 20);
Choice下拉选择框Choice choice = new Choice(); choice.add("Item1"); choice.add("Item2");
Checkbox复选框Checkbox checkBox = new Checkbox("Check Me");

常用事件监听器接口表

监听器接口描述示例代码
ActionListener处理动作事件,如按钮点击button.addActionListener(e -> { ... });
KeyListener处理键盘事件textField.addKeyListener(new KeyAdapter() { ... });
MouseListener处理鼠标事件panel.addMouseListener(new MouseAdapter() { ... });
WindowListener处理窗口事件,如窗口打开、关闭frame.addWindowListener(new WindowAdapter() { ... });

高级GUI组件表格总结

组件描述示例代码
JTable用于显示和编辑二维表格数据的组件JTable table = new JTable(data, columnNames);
JTree用于显示分层数据的树形结构组件JTree tree = new JTree(root);
JTabbedPane用于创建选项卡界面的组件JTabbedPane tabbedPane = new JTabbedPane();
JSplitPane用于在一个窗口中分割两个组件的组件JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel);

总结

本文详细介绍了Java GUI编程的基础知识,包括Swing和AWT框架、事件处理以及高级GUI组件的使用。通过示例代码和表格总结,帮助读者更好地理解和应用Java中的GUI编程,提高应用程序的用户交互体验。

相关文章:

Java GUI编程

引言 图形用户界面&#xff08;GUI&#xff09;编程是使应用程序与用户进行交互的重要部分。Java提供了多种用于GUI开发的工具和库&#xff0c;最常用的是Swing和AWT。本文将详细介绍Java GUI编程的基础知识&#xff0c;包括Swing和AWT框架、事件处理以及高级GUI组件的使用&…...

ROS机器人小车建模仿真与SLAM

文章目录 一、URDF二、创建小车模型1.创建功能包2.导入依赖3.创建urdf,launch文件&#xff1a;4.可视化 三、添加雷达1.xacro文件2.集成和修改launch3.添加摄像头和雷达 三.GAZEBO仿真四、orbslam2kitti1.下载2.安装编译ORB_SLAM23.运行Kitee数据集 一、URDF ​ URDF&#xff…...

Windows10安装Docker Desktop(实操步骤版)

1&#xff0c;下载Docker Desktop 官网下载地址&#xff1a; https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe 国内镜像下载地址&#xff08;本人下载这个&#xff09;&#xff1a; https://smartidedl.blob.core.chinacloudapi.cn/docker/2…...

Leetcode 45. 跳跃游戏 II(DP 双指针)

Leetcode 45. 跳跃游戏 II 动态规划 使用dp [ ] 记录每个位置可达的最小步数&#xff0c;每到达一个点时&#xff0c;更新该点所能跳跃区间内的所有点的dp值 时间复杂度较高 class Solution {public int jump(int[] nums) {int n nums.length;int dp[] new int [n];int N …...

Codeforces Round 952 (Div. 4)(实时更新)

A - Creating Words 题意&#xff1a;略 代码&#xff1a; #include<bits/stdc.h> #define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)//不能使用scanf了 #define int long long #define loop(n) for(int i0;i<n;i) #define rloop(n) for(int in-1;i>…...

【AI实践】Dify开发应用和对接微信

自定义应用 创建应用有2种&#xff0c; 从应用模板创建 空白应用&#xff0c;也就是自定义应用 选择翻译助手 Translation assistant模板创建一个应用 自定义应用&#xff0c;创建一个child_accompany_bot自定的应用&#xff0c;用来支持家长&#xff0c;如何解决低龄儿童的…...

精准定位,智慧提纯:高级数据提取策略

在数据驱动的时代&#xff0c;高级数据提取策略成为企业决策、科学研究以及各类项目成功的关键。数据提取&#xff0c;不仅仅是简单地收集信息&#xff0c;而是需要精准定位目标数据&#xff0c;并通过智慧提纯方法&#xff0c;从海量数据中提取出有价值、有深度的信息。本文将…...

USB转I2C转SPI芯片CH341与CH347比较

1. 芯片中文资料&#xff1a; USB转I2C转SPI芯片CH341 高速USB转接芯片CH347转9M双串口转I2C转SPI转JTAG转SWD USB2.0高速转接芯片CH347应用开发手册 2. CH341与CH347比较&#xff1a; 类别CH341CH347备注串口速度2M9MCH347的串口速度更快设置CH341的I2C或SPI不能与串口同…...

期权无风险套利(Risk-Free Arbitrage)举例以及期权无套利定价公式

期权市场的无风险套利 中文版 期权市场中的套利实例 为了清楚地说明&#xff0c;让我们通过一个现实的例子来展示套利。 期权市场中的套利实例 假设市场上有以下价格&#xff1a; 标的股票价格&#xff1a;100美元欧式看涨期权&#xff08;行权价100美元&#xff0c;3个月…...

Java基础知识巩固自测(上)

前言 该文章适用于已初步了解Java基础知识的入门学习者&#xff0c;便于快速回顾知识点&#xff0c;查漏补缺。 内容包括&#xff1a;Java面向对象相关知识、SQL基础语法 复习建议技巧 实用3W思维法&#xff08;What、Why、How&#xff09; 1. What&#xff08;什么&#x…...

通过 Python+Nacos实现微服务,细解微服务架构

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 背景 一直以来的想法比较多&#xff0c;然后就用Python编写各种代码脚本。很多…...

如何使用new和delete操作符进行动态内存分配和释放?

在C中&#xff0c;new 和 delete 操作符用于在堆&#xff08;heap&#xff09;上动态地分配和释放内存。这是管理内存的一种重要方式&#xff0c;特别是在需要创建可变数量或生命周期与程序执行流程不一致的对象时。 使用 new 进行动态内存分配 当你使用 new 操作符时&#x…...

【SCAU数据挖掘】数据挖掘期末总复习题库选择题及解析

1.将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?( C ) A.频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 解析:数据预处理是数据分析和数据挖掘的重要步骤之一,包括数据清洗、集成、变换、规约(如维度规约、数值规约)等。这…...

顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH) 一、最大通话时间 1、配置拨号方案 1、点击拨号方案 ->2、在框中输入通话最大时长->3、点击添加->4、根据图中配置->5、勾选continue。修改拨号方案需要等待一分钟即可生效 action"sched…...

深度学习:使用argparse 模块

在深度学习中&#xff0c;结合 Bash 脚本和 argparse 模块&#xff0c;可以实现高效的任务自动化和参数管理。Bash 脚本可以用来调度任务和管理环境&#xff0c;而 argparse 模块可以用来解析命令行参数&#xff0c;控制深度学习模型的训练和评估过程。 1.argparse 模块 argp…...

unity text根据文本内容自动设置高度

我们经常会遇到需要根据文字数量动态修改文本框高度的需求&#xff0c;我们可以使用文本的行数*每行的高度来计算文本框的高度&#xff0c;伪代码如下&#xff1a; int oneLineHight 50;// 每行的像素高度 private void ResetTextHight(string str) {//设置文字内容ShowText.…...

ARM 汇编 C语言 for循环

在使用 Keil 编译基于 STM32F103 的 C 语言程序时&#xff0c;生成的汇编代码会有一些不同。STM32F103 是基于 ARM Cortex-M3 内核的微控制器&#xff0c;因为汇编语言是 ARM 汇编&#xff0c;而不是 x86 汇编。 示例 C 代码 假设我们有如下的简单 C 语言 for 循环代码&#x…...

java:【@ComponentScan】和【@SpringBootApplication】扫包范围的冲突

# 代码结构如下&#xff1a; 注意【com.chz.myBean.branch】和【com.chz.myBean.main】这两个包是没有生重叠的。 主程序【MyBeanTest1、MyBeanTest2、MyBeanTest3】这两个类是在包【com.chz.myBean.main】下 # 示例代码 【pom.xml】 <dependency><groupId>org.…...

本学期嵌入式期末考试的综合项目,我是这么出题的

时间过得真快&#xff0c;临近期末&#xff0c;又到了老师出卷的时候。作为《嵌入式开发及应用》这门课的主讲教师&#xff0c;今年给学生出的题目有一点点难度&#xff0c;最后的综合项目要求如下所示&#xff0c;各位学生朋友和教师同行可以评论一下难度如何&#xff0c;单片…...

CSS概述

CSS是一种样式表语言&#xff0c;用于为HTML文档控制外观&#xff0c;定义布局。例如&#xff0c; CSS涉及字体、颜色、边距、高度、宽度、背景图像、高级定位等方面 。 ● 可将页面的内容与表现形式分离&#xff0c;页面内容存放在HTML文档中&#xff0c;而用 于定义表现形式…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...