欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 12.5Swing控件3Jpanel JOptionPane

12.5Swing控件3Jpanel JOptionPane

2025/8/12 2:29:42 来源:https://blog.csdn.net/chxii/article/details/148481665  浏览:    关键词: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);}}
}

    版权声明:

    本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

    我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

    热搜词