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

12.3Swing控件1

Swing 组件

Swing 组件基于 JComponent 类,这是一个轻量级容器,几乎所有 Swing 组件都是它的直接或间接子类。JComponent 及其子类构成了 Swing 组件库的核心部分。

主要组件


顶层容器:
  • JFrame:主应用程序窗口。
  • JDialog:对话框窗口,可以作为独立窗口使用或者依附于 JFrame。
  • JWindow:没有边框和标题栏的窗口,通常用于创建临时弹出窗口。
  • 中间容器:
  • JPanel:一个通用的轻量级容器,用于组织和分组组件。
  • JSplitPane:允许用户通过拖动分割条来调整两个组件之间的大小比例。
  • JTabbedPane:以标签页形式显示多个组件。
基本控件:
  • JButton:按钮组件。
  • JLabel:用于显示文本或图片的标签。
  • JTextField 和 JPasswordField:单行文本输入框和密码输入框。
  • JTextArea:多行文本区域。
  • JCheckBox 和 JRadioButton:复选框和单选按钮。

复杂控件
  • JTable:用于显示和编辑表格数据。
  • JTree:展示层次结构的数据,如文件系统目录树。
  • JList:显示一组选项列表,用户可以选择一项或多项。
菜单和工具栏:
  • JMenuBar, JMenu, JMenuItem:用于创建菜单栏、菜单及其项。
  • JToolBar:工具栏,通常放置常用的操作按钮。

边框

在 Java 的 Swing 组件中,边框(Border)是用于装饰组件或提供视觉分隔的重要元素。Swing 提供了多种类型的边框,可以通过 javax.swing.border 包中的类来创建和应用这些边框到 Swing 组件上。

JButton button = new JButton("Click Me");
button.setBorder((new EtchedBorder(EtchedBorder.RAISED));

常见的边框类型

  • LineBorder:简单的线型边框。可以设置线条的颜色和粗细。
  • EtchedBorder:蚀刻边框,有两种风格:凹陷(lowered)和凸起(raised),常用来表示组件的边界。
  • BevelBorder:斜面边框,也有两种风格:凹陷和凸起。它给组件提供了立体的效果。
  • TitledBorder:标题边框,允许你在边框上添加一个标题。你可以指定边框的样式、标题的位置以及标题的字体等属性。
  • MatteBorder:一种可以指定边框各边宽度和颜色的边框,也可以用图标填充边框。
  • EmptyBorder:空边框,实际上不绘制任何东西,但是它可以为组件提供额外的空间(内边距)。
  • CompoundBorder:复合边框,允许你将两个边框组合在一起使用,其中一个作为外边框,另一个作为内边框。

创建复杂边框

通过使用 BorderFactory 类,可以方便地创建各种边框。BorderFactory 是一个工厂类,它提供了许多静态方法来生成不同类型的边框。对于需要更复杂的边框设计,如组合多个边框,可以使用 CompoundBorder

Border lineBorder = BorderFactory.createLineBorder(Color.BLACK);
Border emptyBorder = BorderFactory.createEmptyBorder(10, 10, 10, 10);
CompoundBorder compoundBorder = BorderFactory.createCompoundBorder(lineBorder, emptyBorder);JButton button = new JButton("Complex Border");
button.setBorder(compoundBorder);

综合案例

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;public class BorderExample extends JFrame {public BorderExample() {// 设置窗口标题和关闭操作super("Swing 边框示例");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(600, 400);setLayout(new GridLayout(3, 3, 10, 10)); // 使用网格布局// 创建面板并设置不同边框// 1. 线型边框 LineBorderJPanel panel1 = new JPanel();panel1.setBorder(BorderFactory.createLineBorder(Color.RED, 3));panel1.add(new JLabel("LineBorder"));// 2. 蚀刻边框 EtchedBorderJPanel panel2 = new JPanel();panel2.setBorder(new EtchedBorder(EtchedBorder.RAISED));panel2.add(new JLabel("EtchedBorder (Raised)"));// 3. 斜面边框 BevelBorderJPanel panel3 = new JPanel();panel3.setBorder(new BevelBorder(BevelBorder.LOWERED));panel3.add(new JLabel("BevelBorder (Lowered)"));// 4. 标题边框 TitledBorder + LineBorderJPanel panel4 = new JPanel();TitledBorder titledBorder = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GREEN, 2),"个人信息",TitledBorder.LEFT,TitledBorder.TOP,new Font("Arial", Font.BOLD, 14),Color.BLUE);panel4.setBorder(titledBorder);panel4.add(new JLabel("Name: Zhang San"));// 5. 空边框 EmptyBorderJPanel panel5 = new JPanel();panel5.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));panel5.setBackground(Color.LIGHT_GRAY);panel5.add(new JLabel("EmptyBorder (Padding Only)"));// 6. 图案边框 MatteBorder(可指定颜色或图标)JPanel panel6 = new JPanel();panel6.setBorder(new MatteBorder(5, 10, 5, 10, Color.ORANGE));panel6.add(new JLabel("MatteBorder"));// 7. 复合边框 CompoundBorderBorder outer = BorderFactory.createLineBorder(Color.BLACK, 2);Border inner = BorderFactory.createEmptyBorder(10, 10, 10, 10);Border compound = BorderFactory.createCompoundBorder(outer, inner);JPanel panel7 = new JPanel();panel7.setBorder(compound);panel7.add(new JLabel("CompoundBorder"));// 添加所有面板到窗口中add(panel1);add(panel2);add(panel3);add(panel4);add(panel5);add(panel6);add(panel7);// 显示窗口setVisible(true);}public static void main(String[] args) {// 使用事件调度线程创建 GUISwingUtilities.invokeLater(() -> new BorderExample());}
}

相关文章:

  • 2025年- H68-Lc176--46.全排列(回溯,组合)--Java版
  • Shiro安全权限框架
  • CCPC题目
  • [特殊字符] 深度剖析 n8n 与 Dify:使用场景、优劣势及技术选型建议
  • 性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断
  • 《射频识别(RFID)原理与应用》期末复习 RFID第二章 RFID基础与前端(知识点总结+习题巩固)
  • 跨域请求解决方案全解析
  • Orthanc:轻量级PACS服务器与DICOMweb支持的技术详解
  • 防火墙设置实战操作案例(小白的“升级打怪”成长之路)
  • 如何搭建Z-Blog PHP版本:详细指南
  • 论文阅读笔记——Large Language Models Are Zero-Shot Fuzzers
  • 网络编程及原理(一)
  • 化学方程式配平免费API接口教程
  • Flutter、React Native 项目如何搞定 iOS 上架?从构建 IPA 到上传 App Store 的实战流程全解析
  • SVM超详细原理总结
  • 系统调试——ADB 工具
  • 使用 React Native 开发鸿蒙运动健康类应用的​​高频易错点总结​​
  • 智能合约安全漏洞解析:从 Reentrancy 到 Integer Overflow
  • C#由于获取WPF窗口名称造成的异常报错问题
  • unix/linux,sudo,其历史争议、兼容性、生态、未来展望
  • 网站设计模板是什么/推广产品的方法和步骤
  • 网站设计制作视频/浏览器搜索引擎大全
  • 网站开发专业/螺蛳粉的软文推广
  • wordpress 替换谷歌/昆明seo排名
  • wordpress 无法在线升级/免费seo课程
  • 宁德做网站公司/石家庄seo公司