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

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);}}
}

    相关文章:

  • 设计模式——模板方法
  • Qt生成日志与以及报错文件(mingw64位,winDbg)————附带详细解说
  • 《深度体验 Egg.js:打造企业级 Node.js 应用的全景指南》
  • AI生成的基于html+marked.js实现的Markdown转html工具,离线使用,可实时预览 [
  • 如何使用Webhook触发器,在 ONLYOFFICE 协作空间构建智能工作流
  • 自建 dnslog 回显平台:渗透测试场景下的隐蔽回显利器
  • stm32_DMA
  • 引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办
  • 从失效文档到知识资产:Gitee Wiki 引领研发知识管理变革
  • 模板方法模式:优雅封装不变,灵活扩展可变
  • 电脑定时关机工具推荐
  • Transformer架构解析:Encoder与Decoder核心差异、生成式解码技术详解
  • 浏览器工作原理06 [#]渲染流程(下):HTML、CSS和JavaScript是如何变成页面的
  • MySQL技术内幕1:内容介绍+MySQL编译使用介绍
  • 10个成功案例剖析|融质AI创新实践
  • php中实现邮件发送功能
  • Spring Boot 类加载机制深度解析
  • 浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
  • 1、cpp实现Python的print函数
  • http头部注入攻击
  • 如何做网站内链/怎样在百度上发帖子
  • 个人定制网站怎么做/汕头网站建设方案优化
  • 京东怎么做轮播图链接网站/排超最新积分榜
  • 为什么没有网站做图文小说/花钱推广的网络平台
  • 浙江政府网站大建设方案/如何写好软文
  • 成都网站快照优化公司/stp营销战略