当前位置: 首页 > 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);}}
}

    http://www.lqws.cn/news/184681.html

    相关文章:

  • 机器学习笔记【Week7】
  • MS8258D 高增益带宽积 FET 输入放大器/激光雷达接收跨阻放大器
  • 【Linux】文件操作
  • SpringAI 1.0.0 正式版——利用Redis存储会话(ChatMemory)
  • 数据结构与算法——二叉树高频题目(1)
  • 【原神 × 二叉树】角色天赋树、任务分支和圣遗物强化路径的算法秘密!
  • CANFD 数据记录仪在汽车售后解决偶发问题故障的应用
  • [蓝桥杯]矩阵翻硬币
  • 矩阵QR分解
  • 配置git命令缩写
  • 数据库系统学习
  • 一些免费的大A数据接口库
  • 提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现
  • Windows系统中如何使用符号链接将.vscode等配置文件夹迁移到D盘(附 CMD PowerShell 双版本命令)
  • 【51单片机】1. 基础点灯大师
  • AndroidR车机TextToSpeech音频焦点异常问题分析
  • 解决Zotero翻译插件Zotero PDF Translate无法正常翻译
  • android手势创建及识别保姆级教程
  • C# 快速检测 PDF 是否加密,并验证正确密码
  • 【QT常用技术讲解】多线程执行后台命令行的两种方式(后台运行和返回打印信息)
  • NoSQL之Redis哨兵
  • 攻击模型的恶意行为检测
  • Kyosan K5BMC ELECTRONIC INTERLOCKING MANUAL 电子联锁
  • 2025服装收银系统推荐:智能管理助力服装商家高效经营
  • 网络库libhv介绍
  • USB扩展器与USB服务器的2个主要区别
  • windows10搭建nfs服务器
  • 网络编程及原理(三)
  • MySQL数据库表设计与索引优化终极指南
  • GEE使用记录