IDEA如何使用 Swing 构建用户界面

IntelliJ IDEA的 UI Designer插件使您可以使用 Swing 库组件为您的应用程序创建图形用户界面 (GUI)。 使用 UI Designer,您可以快速创建在顶层容器中使用的对话框和控件组,例如 JFrame。 这些元素可以与您直接在 Java 代码中定义的组件共存。

在本教程中,您将学习使用 UI Designer 的基础知识,并尝试为示例应用程序创建自己的 GUI 表单。 作为练习,我们将构建一个图形用户界面表单,用于编辑有关书籍的信息,例如书名、作者、类型和可用状态。

在本教程结束时,您的表单将类似于以下示例:

安装 Swing UI Designer 插件

此功能依赖于 Swing UI Designer 插件,您需要安装并启用该插件。

  1. 按 CtrlAlt0S 打开设置,然后选择 插件。

  2. 打开 Marketplace 选项卡,找到 Swing UI Designer 插件,并单击 安装 (如果出现提示,请重启 IDE)。

克隆示例项目

该应用程序的源代码托管在 GitHub 上,位于 Build UI using Swing Sample Project。

  1. 在主菜单中,前往 文件(F) | 新建(N) | 来自版本控制的项目…。

  2. 指定存储库的 URL,然后单击 克隆。

  3. 如有需要,请同意在新窗口中打开克隆的项目。

IntelliJ IDEA 存储了您在 .form 文件中创建的 GUI 窗体的信息。 表单可以与 Java 源文件关联,并置于 版本控制之下。

首先,我们将创建一个新的 GUI 表单及其关联的 Java 类。

创建新的 GUI 表单

  1. 在 项目 工具窗口 Alt01 ,选择 src.com.example.library.forms 包,按 AltInsert ,并选择 Swing UI 设计器 | Swing UI 窗体。

  2. 在打开的 新建GUI 窗体 对话框中,指定以下详细信息:

    • 窗体名称(F) :指定BookEditor作为新 GUI 表单的名称。

    • 基础布局管理器(L) :从下拉列表中选择GridLayoutManager (IntelliJ)布局管理器。

    • 创建绑定类(B) :选择该选项与窗体一起创建一个关联的 Java 类。

      IntelliJ IDEA 将自动创建一个 Java 类并绑定到 GUI 表单。 绑定类作为 GUI 表单的底层代码表示。 它允许您将组件链接到类中的对应字段,并有助于实现表单的行为和功能。

    • 类名(C) :保留与表单关联的 Java 类的默认名称。

  3. 点击 OK。

我们的项目现在有一个 BookEditor.form 文件和 BookEditor.java 文件。 BookEditor.form 文件是我们安排 GUI 组件并设置其属性的地方。 该 BookEditor.java 文件将包含使我们的表单功能化的代码。

表单部分

在我们继续之前,让我们快速看一下 BookEditor.form 。 当您选择一个 .form 文件时,您将看到由四个主要部分组成的 UI Designer。

  1. Form workspace:显示表单中组件的可视化表示。 创建新的 GUI 窗体时,顶级 JPanel 组件会默认添加到 IntelliJ IDEA 中,您可以添加更多组件来构建您的窗体。

  2. 组件树:显示设计窗体中包含的组件,并使您可以导航和选择一个或多个组件。 我们的表单目前只有一个组件,JPanel,不过我们很快会添加更多组件。

  3. 属性检查器:显示当前在表单工作区或 组件树中选择的组件的属性。

  4. Palette:包含您可以放置在表单中的 UI 组件列表。

接下来,让我们继续构建表单并将必填字段、复选框和控件整合到我们的 Book 编辑器中。

首先,您可以处理 JPanel 组件,该组件充当容器来存储您要构建的 GUI。

设置 JPanel 容器

  1. 在 BookEditor.java 打开并将以下代码粘贴到文件顶部的包声明下:

    import javax.swing.*;
  2. 在 BookEditor.java 中也将以下代码粘贴到BookEditor类中:

    private JPanel contentPane;
  3. 打开 BookEditor.form 文件。

    IntelliJ IDEA 不提供在编辑器中打开基于 XML 的 .form 文件的方式。 请勿手动修改这些文件。

    在 组件树 部分,选择 JPanel以查看组件的可用属性。

  4. 在属性检查器中,将 字段名 属性的值设置为 contentPane。

在表单上放置 GUI 组件

  1. 打开 BookEditor.form 文件。

  2. 在 调色板 部分,选择 JTextField并点击表单的顶部部分放置组件。

    重复此操作,并按从上到下的顺序分别添加一个 JTextField 、一个 JComboBox 和一个 JCheckBox 组件。

    IntelliJ IDEA 显示添加的组件在 组件树 中,并将相应的声明添加到 BookEditor.java 中。

  3. 打开 BookEditor.java 。 将BookEditor类替换为以下内容,在其中我们重新命名了字段名并扩展了BookEditor类:

    public class BookEditor extends JFrame { private JPanel contentPane; private JTextField bookNameField; private JTextField authorNameField; private JComboBox genreComboBox; private JCheckBox isTakenCheckBox; }
  4. 请切换回 BookEditor.form 。 您将看到,在 BookEditor.java 更改字段名称后,IntelliJ IDEA 在 组件树 中显示错误。 要解决这些问题,请在属性检查器中将更新后的组件名称设置为 字段名 属性的值。

    请记住, textField1 已重命名为bookNameField, textField2 已重命名为authorNameField

我们目前的字段名称没有任何标签,终端用户无法识别。 Swing 库提供了一个特定的组件, JLabel ,您可以使用它向您的 GUI 表单添加任何文本标签。

对于复选框,不需要添加标签,因为您可以直接在 JCheckBox 组件属性中配置文本。

添加文本标签

  1. 在每个 JTextField 和 JComboBox 右侧添加 JLabel 组件。

  2. 在 组件树 中选择第一个 JLabel。 在属性检查器中,将 文本 属性的值更改为Title

    在创建标签时,您可以输入字符串或使用 .properties 文件中的键值对。

  3. 以类似的方式将其他两个标签的名称更改为AuthorGenre

  4. 请在 组件树 中选择 JCheckBox 组件。 然后,将不可用指定为 文本 属性的值。

我们希望我们的图书编辑器能够保存和放弃最终用户所做的更改。 为此,让我们添加 保存和 取消按钮。

添加按钮

  1. 在包含 JCheckBox 的单元格下面添加 VSpacer 组件。 这将创建一个用于按钮的区域并将其平均分成两半。

  2. 在垂直空隔的每一侧添加两个 JButton 组件。

  3. 在每个按钮的 文本 属性中,分别指定它们的名称——取消Save

现在我们已经将所有必要的 Swing 组件放置到 GUI 表单中,让我们检查中间结果并了解表单在运行时的外观。

预览 GUI 表单

  • 右键点击您的 GUI 表单,然后从上下文菜单中选择 预览。

    IntelliJ IDEA 将显示 窗体预览 对话框。 在预览模式下,您可以点击按钮、选择复选框、输入文本等,就像在运行时所做的一样。

在此阶段,我们的GUI表单有些粗糙。 让我们通过调整边距并设置首选窗口大小来改善其外观和感觉。

调整 GUI 窗体的外观和感觉

  1. 在 组件树 中选择 JPanel容器。

  2. 要使用 边距 属性组配置容器的顶部、底部、左侧和右侧边距。 将每个边距的值设置为10

  3. 若要配置表单的首选大小,请选择 显示专家属性(S) 复选框,然后找到并展开 preferredSize 属性组。 请将 宽度 属性的值设置为400,并将 高度 的值设置为200

  4. 再运行一次预览以检查结果。

为表单添加功能

现在 GUI 表单已经准备好了,您可以通过编辑 BookEditor.java 中的内容来使其发挥作用。 本教程中的表单功能已准备好,并可以在 BookEditorExample.java 中找到,位于 src/com/example/library/forms/BookEditorExample 下。

  1. 将 BookEditor.java 的内容替换为 BookEditorExample.java 的内容。

  2. "在 BookEditor.java 中,将类声明和公共方法声明中的两个BookEditorExample重命名为BookEditor。"

  3. 打开 Main.java 并 运行应用程序。

您在表单中输入的书籍详细信息将会打印在终端中。

故障排除

  • 问题:使用外部构建系统(Maven/Gradle)构建带有 GUI 设计器表单的项目时,表单未被编译,代码无法运行,在尝试访问组件时失败并出现NullPointerException错误。

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

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

相关文章

动态功耗调度让乡村医疗设备续航翻倍

📝 博客主页:Jax的CSDN主页 目录动态功耗调度:乡村医疗设备续航的革命性突破 一、痛点:乡村医疗设备续航的系统性危机 二、破局:LLM驱动的动态功耗调度技术框架 三、实证效果:续航翻倍的乡村落地实践 四、挑…

研究考虑冷、热、电、气4种能源形式的综合能源系统,系统内含能源设备主要包括光伏电源、风力机组、...

研究考虑冷、热、电、气4种能源形式的综合能源系统,系统内含能源设备主要包括光伏电源、风力机组、燃气轮机和燃气锅炉;储能系统主要包括储电设备蓄电池、储热设备蓄热槽;能量转换设备包括余热锅炉、电锅炉、吸收式制冷机、电制冷机和电锅炉等…

在 ABAP Cloud 中优雅访问系统字段:一套可测试、可扩展的 System Context 方案

在很多 ABAP 项目里,SY / SYST 就像空气一样自然:拿当前用户、系统日期时间、语言、消息字段、SY-SUBRC……随手就用。但当你把代码搬到 ABAP Cloud,或者开始认真做 ABAP Unit,你会立刻感受到两个现实: 可用性在变化:部分系统字段在 ABAP Cloud 场景下会出现限制、告警,…

智能门禁系统:CRNN OCR识别身份证信息

智能门禁系统:CRNN OCR识别身份证信息 📖 项目背景与技术挑战 在智能安防、身份核验和自动化办公等场景中,身份证信息的自动提取是实现高效服务的关键环节。传统的人工录入方式不仅效率低下,还容易因视觉疲劳或字迹模糊导致错误。…

在 ABAP Cloud 里用 sXML Writer 生成 XML:不靠 Transformation 也能把结构搭得很漂亮

在很多团队里,大家已经习惯了用 JSON 做接口载荷;可一到真实的企业集成场景,XML 仍然经常出现:老系统的 SOAP Web Service、第三方网关的签名报文、某些行业标准(物流、税务、制造设备对接)都可能只认 XML。更现实的一点是,在 ABAP Cloud 场景下,你未必能随手拿到所有传…

提效安全双平衡:CI/CD工具该选谁?流水线产品评测

在研发数字化进程中,企业常陷入 “提效” 与 “安全” 的两难 —— 一味追求迭代速度易忽视代码漏洞、配置风险,过度强调安全管控又会让流程卡顿、拖慢交付节奏。如何找到二者的平衡点,让 CI/CD 工具既能成为提效 “加速器”,又能…

Webhooks:构建实时响应式系统的隐形桥梁

目录 一、Webhooks的技术本质 二、工作原理深度解析 三、核心应用场景 四、安全实践与挑战 五、未来发展趋势 在数字化浪潮中,系统间的实时通信需求日益迫切。传统轮询机制因效率低下已难以满足现代应用需求,而Webhooks作为一种轻量级的事件通知机制…

医疗监护领域监测呼气末二氧化碳浓度的NDIR CO2传感器

呼气末二氧化碳(endtidal carbon dioxide,ETCO2)监测是一项无创、简便、实时、连续的功能学监测指标。随着监测设备的小型化、采样方法的多样化、监测结果的精准化,ETCO2在急诊科的临床工作中得到了越来越广泛的使用。在医疗监护领…

突发!刚刚新增17本期刊被剔除!

刚刚,Scopus数据库再次迎来更新!与上次更新相比,本次SCOPUS来源出版物列表(Scopus Sources)共有48189本期刊被收录。其中:● 17本期刊不再被数据库收录(Discontinued Titles)● 388本期刊被数据库收录(Accepted Titles)剔除期刊详…

项目解决方案:港口AI识别建设解决方案

目录 第一章 项目背景 1.1 智能化转型需求 1.2 安全管理需求升级 1.3 技术革新推动 第二章 需求确认 2.1 多平台访问与视频汇聚需求 2.2 权限管理与安全需求 2.3 AI识别需求 2.4 数据整合与分析需求 第三章 建设目标 3.1 经济完备,高性价比 3.2 先进实用…

在 ABAP Cloud 用 XCO 生成 UUID:一行拿到稳定主键,并在多种格式间自由转换

在 Fiori 与 RAP 越来越主导应用体验的今天,主键长什么样 这件事正在悄悄改变。很多场景里,用户并不关心一条业务数据的技术主键是不是 0000000815,他们更关心的是客户名称、订单号、合同文本这些业务可读信息。于是,技术主键 的目标逐步从 可读 转向 可靠、全局唯一、易集…

抄死主力组合系列主图 + 附图 2013年5月19日16:12:52

{}A3:(C-LLV(L,9))/(HHV(H,9)-LLV(L,9))*100; A4:SMA(A3,3,1); A5:SMA(A4,3,1); A6:3*A4-2*A5; A7:C-REF(C,1); A8:100*EMA(EMA(A7,6),6)/EMA(EMA(ABS(A7),6),6); BDGD:CHHV(C,10); GDSJ:BARSLAST(BDGD); 短期压力:IF(GDSJ>0,REF(C,GDSJ),REF(C,GDSJ)),COLORMAGENTA,POINTDO…

CRNN OCR性能测试:在不同硬件环境下的表现

CRNN OCR性能测试:在不同硬件环境下的表现 📖 项目简介 本技术博客聚焦于基于CRNN(Convolutional Recurrent Neural Network)架构的轻量级OCR系统,在多种真实硬件环境下的推理性能与识别精度实测分析。该OCR服务以Mo…

亲测好用9个AI论文网站,助你轻松搞定本科毕业论文!

亲测好用9个AI论文网站,助你轻松搞定本科毕业论文! 1.「千笔」—— 一站式学术支持“专家”,从初稿到降重一步到位(推荐指数:★★★★★) 在众多AI论文工具中,「千笔」无疑是一个脱颖而出的佼佼…

基于 YOLOv8 的 100 类中药材智能识别实战 [目标检测完整源码]

基于 YOLOv8 的 100 类中药材智能识别实战 [目标检测完整源码] 引言:中药识别,为什么一定要“检测”而不是“分类”? 在中药材智能识别领域,很多初学者会优先选择 图像分类模型(ResNet、EfficientNet)&am…

华为OD技术面真题 - 计算机网络 - 3

文章目录 介绍一下HTTP报文结构HTTP请求方法有哪些,分别代表什么含义HTTP响应状态码分为哪几类HTTP和HTTPS的区别HTTP请求为什么是无状态的如何使用HTTP实现有状态访问 介绍一下HTTP报文结构 HTTP请求头结构图: 请求报文整体分为四个部分:…

【开源】基于 C# 和 Halcon 机器视觉开发的车牌识别工具(附带源码)

文章目录项目介绍应用场景功能特点Halcon关键代码功能截图源码地址C#调用项目代码项目介绍 halcon_chepai一款基于C#编程语言与Halcon机器视觉库的车牌识别系统。该系统利用Halcon强大的图像处理能力,结合C#的灵活性与易用性,实现了高效、准确的车牌识别…

能否添加背景音乐?后处理功能开发中,支持音频混音导出

能否添加背景音乐?后处理功能开发中,支持音频混音导出 🎧 语音合成的进阶需求:从“能说”到“好听” 当前,基于 Sambert-Hifigan 的中文多情感语音合成系统已实现高质量、低延迟的文本转语音能力。用户可通过 WebUI 或…

技术日报|开源搜索智能体MiroThinker登顶日增803星,Claude记忆插件claude-mem爆发破万二

🌟 TrendForge 每日精选 - 发现最具潜力的开源项目 📊 今日共收录 15 个热门项目,涵盖 48 种编程语言 🌐 智能中文翻译版 - 项目描述已自动翻译,便于理解 🏆 今日最热项目 Top 10 🥇 MiroMindA…

低成本实现语音播报:Sambert-Hifigan+轻量服务器,月成本不足百元

低成本实现语音播报:Sambert-Hifigan轻量服务器,月成本不足百元 引言:中文多情感语音合成的现实需求 在智能客服、有声阅读、教育辅助和IoT设备中,高质量的中文语音合成(TTS) 正成为提升用户体验的关键能…