12.5Swing控件3Jpanel JOptionPane

JPanel

JPanel是一个轻量级容器组件,用于组织和管理其他 GUI 组件。它继承自JComponent类,属于javax.swing包,可以容纳按钮、文本框、标签等控件  JPanel 默认使用的布局管理器是 FlowLayout,也可以嵌套其他面板,以便将它们组合在一起并作为一个整体来布局。帮助开发者创建复杂的界面布局。

1. JPanel 的基本特点

  • 轻量级容器:不自带标题栏或边框,需通过setBorder()方法添加。
  • 透明性:默认背景透明,但可通过setOpaque(true)设置为不透明。
  • 布局管理:需指定布局管理器(如FlowLayoutBorderLayoutGridLayout等)。

2. 常用构造方法

  • JPanel():创建默认使用FlowLayout的面板。
  • JPanel(LayoutManager layout):创建指定布局管理器的面板。

3. 核心方法

方法描述
add(Component comp)添加组件到面板。
setLayout(LayoutManager)设置面板的布局管理器。
setBackground(Color)设置面板背景色。
setBorder(Border)设置面板边框(如LineBorder)。
setOpaque(boolean)设置面板是否透明。

4. 布局管理器示例

以下代码展示了JPanel结合不同布局管理器的用法:


import javax.swing.*;
import java.awt.*;public class JPanelExample {public static void main(String[] args) {// 创建JFrame窗口JFrame frame = new JFrame("JPanel示例");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(600, 400);// 1. FlowLayout面板(默认布局)JPanel flowPanel = new JPanel();flowPanel.setBorder(BorderFactory.createTitledBorder("FlowLayout"));for (int i = 1; i <= 5; i++) {flowPanel.add(new JButton("按钮" + i));}// 2. BorderLayout面板JPanel borderPanel = new JPanel(new BorderLayout());borderPanel.setBorder(BorderFactory.createTitledBorder("BorderLayout"));borderPanel.add(new JButton("北"), BorderLayout.NORTH);borderPanel.add(new JButton("南"), BorderLayout.SOUTH);borderPanel.add(new JButton("西"), BorderLayout.WEST);borderPanel.add(new JButton("东"), BorderLayout.EAST);borderPanel.add(new JButton("中"), BorderLayout.CENTER);// 3. GridLayout面板JPanel gridPanel = new JPanel(new GridLayout(2, 3));gridPanel.setBorder(BorderFactory.createTitledBorder("GridLayout (2x3)"));for (int i = 1; i <= 6; i++) {gridPanel.add(new JButton("网格" + i));}// 主面板:使用BoxLayout垂直排列三个子面板JPanel mainPanel = new JPanel();mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));mainPanel.add(flowPanel);mainPanel.add(Box.createVerticalStrut(10)); // 添加间距mainPanel.add(borderPanel);mainPanel.add(Box.createVerticalStrut(10));mainPanel.add(gridPanel);// 将主面板添加到窗口frame.add(mainPanel);frame.setVisible(true);}
}

5. 嵌套面板示例

通过嵌套面板,可以创建复杂的界面结构。以下是一个计算器布局示例:

import javax.swing.*;
import java.awt.*;public class CalculatorExample {public static void main(String[] args) {JFrame frame = new JFrame("计算器");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 400);// 主面板:BorderLayoutJPanel mainPanel = new JPanel(new BorderLayout());// 顶部面板:显示框JTextField display = new JTextField();display.setEditable(false);display.setFont(new Font("Arial", Font.PLAIN, 24));mainPanel.add(display, BorderLayout.NORTH);// 中间面板:数字按钮(使用GridLayout)JPanel buttonPanel = new JPanel(new GridLayout(4, 4, 5, 5));String[] buttons = {"7", "8", "9", "/","4", "5", "6", "*","1", "2", "3", "-","0", ".", "=", "+"};for (String text : buttons) {buttonPanel.add(new JButton(text));}mainPanel.add(buttonPanel, BorderLayout.CENTER);frame.add(mainPanel);frame.setVisible(true);}
}

6. 自定义绘制

通过继承JPanel并重写paintComponent(Graphics)方法,可以实现自定义绘图:

import javax.swing.*;
import java.awt.*;public class CustomPanelExample {public static void main(String[] args) {JFrame frame = new JFrame("自定义面板");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);// 创建自定义面板JPanel customPanel = new JPanel() {@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);// 绘制矩形g.setColor(Color.RED);g.fillRect(50, 50, 100, 100);// 绘制椭圆g.setColor(Color.BLUE);g.fillOval(200, 50, 100, 100);// 绘制文本g.setColor(Color.BLACK);g.setFont(new Font("Arial", Font.BOLD, 20));g.drawString("自定义绘图", 150, 200);}};customPanel.setOpaque(true);customPanel.setBackground(Color.WHITE);frame.add(customPanel);frame.setVisible(true);}
}

7. 注意事项

  • 线程安全:Swing 不是线程安全的,所有 GUI 操作应在事件调度线程(EDT)中执行。可使用SwingUtilities.invokeLater()确保线程安全。
  • 布局管理:合理选择布局管理器,避免手动设置组件大小和位置。
  • 重绘机制:调用repaint()方法触发paintComponent()重绘面板。

JPanel是 Swing 中组织界面的核心组件,通过灵活搭配布局管理器和嵌套结构,可以构建出各种复杂的 GUI 界面。掌握JPanel的使用是 Java GUI 开发的基础。

JOptionPane

1. JOptionPane 提供了一种简单的方式来弹出标准对话框,如消息框、确认对话框、输入对话框等。它是实现与用户进行简单交互的一种便捷方式。

JOptionPane 提供了五种预定义的对话框类型:

  • 消息对话框:显示信息,如操作成功提示。
  • 确认对话框:询问用户确认操作,如 “是否保存?”。
  • 输入对话框:获取用户输入的文本。
  • 选项对话框:提供多个选项供用户选择。
  • 文件选择对话框:虽然属于 JFileChooser,但常与 JOptionPane 配合使用。

2. 常用静态方法

方法描述
showMessageDialog(Component parent, Object message)显示消息对话框
showConfirmDialog(Component parent, Object message)显示确认对话框(返回用户选择的按钮值)
showInputDialog(Component parent, Object message)显示输入对话框(返回用户输入的文本)
showOptionDialog(Component parent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue)自定义选项对话框

3. 参数说明

  • parentComponent:对话框的父组件,用于定位。若为 null,对话框居中显示。
  • message:对话框中显示的内容(可以是字符串、组件或图标)。
  • title:对话框标题。
  • optionType:确认对话框的按钮类型(如 YES_NO_OPTIONYES_NO_CANCEL_OPTION)。
  • messageType:消息类型(如 ERROR_MESSAGEINFORMATION_MESSAGE),影响图标显示。
  • icon:自定义图标。
  • options:自定义选项数组。

4. 消息对话框示例

import javax.swing.JOptionPane;public class MessageDialogExample {public static void main(String[] args) {// 基本消息对话框JOptionPane.showMessageDialog(null, "操作成功!", "提示", JOptionPane.INFORMATION_MESSAGE);// 错误消息对话框JOptionPane.showMessageDialog(null, "文件不存在!", "错误", JOptionPane.ERROR_MESSAGE);// 警告消息对话框JOptionPane.showMessageDialog(null, "磁盘空间不足!", "警告", JOptionPane.WARNING_MESSAGE);}
}

5. 确认对话框示例

import javax.swing.JOptionPane;public class ConfirmDialogExample {public static void main(String[] args) {// 标准确认对话框(Yes/No/Cancel)int choice = JOptionPane.showConfirmDialog(null, "是否保存更改?", "确认", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);// 处理用户选择switch (choice) {case JOptionPane.YES_OPTION:System.out.println("用户选择了Yes");break;case JOptionPane.NO_OPTION:System.out.println("用户选择了No");break;case JOptionPane.CANCEL_OPTION:case JOptionPane.CLOSED_OPTION:System.out.println("操作取消");break;}}
}

6. 输入对话框示例

import javax.swing.JOptionPane;public class InputDialogExample {public static void main(String[] args) {// 基本文本输入String name = JOptionPane.showInputDialog(null, "请输入您的姓名:", "用户信息", JOptionPane.PLAIN_MESSAGE);if (name != null && !name.isEmpty()) {JOptionPane.showMessageDialog(null, "欢迎," + name + "!", "问候", JOptionPane.INFORMATION_MESSAGE);} else {JOptionPane.showMessageDialog(null, "输入为空或已取消", "提示", JOptionPane.WARNING_MESSAGE);}// 自定义选项输入Object[] options = {"红色", "绿色", "蓝色"};Object color = JOptionPane.showInputDialog(null, "选择喜欢的颜色:", "颜色选择", JOptionPane.QUESTION_MESSAGE, null, options, options[0]);if (color != null) {JOptionPane.showMessageDialog(null, "您选择了:" + color, "结果", JOptionPane.INFORMATION_MESSAGE);}}
}

7. 自定义选项对话框示例

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;public class OptionDialogExample {public static void main(String[] args) {// 自定义图标Icon icon = new ImageIcon("path/to/icon.png"); // 替换为实际图标路径// 自定义选项Object[] options = {"确定", "取消", "帮助"};// 自定义选项对话框int selectedOption = JOptionPane.showOptionDialog(null, "请选择操作:", "自定义对话框", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, icon, options, options[0]);// 处理结果if (selectedOption >= 0) {JOptionPane.showMessageDialog(null, "您选择了:" + options[selectedOption], "结果", JOptionPane.INFORMATION_MESSAGE);}}
}

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

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

    相关文章

    MIPI信号为什么不能进行长距离传输

    1.关于MIPI信号传输 MIPI信号是不适合长距离传输的。 2.MIPI的信号摆幅小&#xff0c;抗干扰能力比较弱 MIPI信号的差分摆幅比较小&#xff0c;通常只有100mV~200mV,远远低于LVDS的350mV的摆幅 小摆幅信号在长线缆上传输的时候更容易被噪声淹没&#xff0c;信噪比下降&#xf…

    Qt的学习(二)

    1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …

    Windows11+VS2019配置Libigl-2.4.1

    Windows11VS2019配置Libigl-2.4.1 由于课题需要&#xff0c;所以出一篇配置Libigl的博客&#xff0c;制作不易&#xff0c;请多多点赞 一、官网下载 官网&#xff1a;https://libigl.github.io/ GitHub下载地址&#xff1a;https://github.com/libigl/libigl 这里我们选择…

    地球科学方向(Geoscience and Remote Sensing),1天见刊,当月可检索!

    CSP科学出版社&#xff0c;旨在通过为研究人员提供最佳环境来发表、参考、阅读和引用他们的作品&#xff0c;从而为科学界服务。现已与科检易学术达成出版战略合作&#xff0c;现在联合共同出版高质量学术水平的期刊&#xff0c;为方便广大科研学者投稿方便&#xff0c;现已经建…

    基于 Three.js 的 3D 模型快照生成方案

    基于 Three.js 的 3D 模型快照生成方案 此方案通过 Three.js 渲染场景并异步生成图像数据&#xff0c;同时支持分辨率缩放和 Blob 格式输出&#xff0c;为模型预览、截图保存等需求提供完整解决方案。 问题分析&#xff1a; 使用html2canvas 生成的快照画布显示为空&#xff…

    「Java基本语法」变量的使用

    变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…

    SpringCloud学习笔记-2

    说明&#xff1a;来源于网络&#xff0c;如有侵权请联系我删除 1.提问&#xff1a;如果注册中心宕机&#xff0c;远程调用还能成功吗 答&#xff1a;当微服务发起请求时&#xff0c;会向注册中心请求所有的微服务地址&#xff0c;然后在向指定的微服务地址发起请求。在设计实…

    Hac - NBh标准JSON协议使用说明文档

    Hac - NBh 标准 JSON 协议使用说明文档 一、协议概述 Hac - NBh 标准 JSON 协议是专为物联网设备与服务器数据交互设计的通信协议。以 JSON 格式为基础,采用键值对(KV 值)组织数据,支持灵活选取数据项,通过 CBOR 格式实现高效传输,并利用 AES 128 加密保障数据安全。 …

    k8s从入门到放弃之Service负载均衡

    k8s从入门到放弃之Service负载均衡 在 Kubernetes (K8s) 中&#xff0c;Service 是一种抽象&#xff0c;它定义了一组逻辑上的 Pod 和访问它们的策略。Service 的主要目的是提供一种可靠的方式来访问一组具有相同标签&#xff08;Label&#xff09;的 Pod&#xff0c;即使这些…

    【题解-洛谷】P10480 可达性统计

    题目&#xff1a;P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图&#xff0c;分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M&#xff0c;接下来 M M M 行每行两个整数 x , y x,y x,y&#xff0c;表示从 …

    SpringCloud2025+SpringBoot3.5.0+gateway+webflux子服务路由报503

    文章目录 前言一、问题二、原因1.分析2.配置静态路由再试3.定位 总结 前言 本来昨天就应该也记录下&#xff0c;免得忘记的&#xff0c;但是有点晚了&#xff0c;酒没写&#xff0c;真的是被坑惨了。 当然这也是追求最新的代价&#xff0c;也是对新技术、老知识点的重温…

    破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

    城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…

    RAG 文档解析难点1:多栏布局的 PDF 如何解析

    写在前面 在构建检索增强生成 (Retrieval-Augmented Generation, RAG) 应用时,高质量的数据源是成功的基石。PDF 作为一种广泛使用的文档格式,承载着海量的知识。然而,许多 PDF 文档,特别是学术论文、期刊、杂志和一些报告,都采用了多栏布局 (multi-column layout)。 直…

    全面掌握Pandas时间序列处理:从基础到实战

    时间序列数据在金融分析、物联网、商业智能等领域无处不在。作为Python数据分析的核心库&#xff0c;Pandas提供了强大而全面的时间序列处理功能。本文将系统介绍Pandas时间序列处理的各个方面&#xff0c;从基础概念到高级应用&#xff0c;帮助您在实际工作中高效处理时间序列…

    vscode 离线安装第三方库跳转库

    我安装的是C/C的函数跳转 下载的离线库&#xff1a; 项目首页 - vscode代码自动补全跳转插件离线安装包:cpptools-win32.vsix是一款专为VSCode设计的离线安装插件&#xff0c;特别适合无法连接网络的电脑环境。通过安装此插件&#xff0c;您的VSCode将获得强大的代码自动跳转…

    GitHub 趋势日报 (2025年06月05日)

    &#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 1472 onlook 991 HowToCook 752 ChinaTextbook 649 quarkdown 451 scrapy 324 age…

    关于如何使用VScode编译下载keil工程的步骤演示

    1、vscode的插件市场下载keil Assistant 2 、点设置 3、复制keil的地址 4、粘贴到第…

    OD 算法题 B卷【最大岛屿体积】

    文章目录 最大岛屿体积 最大岛屿体积 大于0的数表示陆地&#xff0c;0表示水&#xff0c;请计算由陆地、水组成的网格中最大岛屿的体积&#xff1b;陆地的数字之和表示所在岛屿的体积&#xff0c;岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平或者垂直方向上相邻的陆地…

    一文读懂 Docker Compose(白话版)

    一、Docker Compose 是个啥&#xff1f; 想象你开餐厅&#xff1a; 单容器 一个厨师 &#x1f468;&#x1f373;Docker Compose 整个后厨团队 &#x1f468;&#x1f373;&#x1f469;&#x1f373;&#x1f9d1;&#x1f373; 菜单 工作流程 用个菜单文件&#xff08;…

    Java毕业设计:WML信息查询与后端信息发布系统开发

    JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…