内容来源于《java语言程序设计》(郎波著)以及一些个人理解。


文章目录

  • 一、JFC 简介
  • 二、Swing简介
  • 三、Swing组件类层次
  • 四、创建基于Swing的应用程序GUI
  • 五、L&F设置
  • 六、常用容器
    • (一)顶层容器
    • (二)中间层容器
  • 七、布局管理器
    • (一)FlowLayout
    • (二)BorderLayout
    • (三)GridLayout
    • (四)CardLayout
    • (五)GridBagLayout
    • (六)BoxLayout

一、JFC 简介

JFC(Java Foundation Classes,Java基础类库)是Java平台的一个重要组成部分。JFC包括了开发GUI(Graphics User Interface,图形化用户界面)所需的组件和服务,它包括5个部分的API:AWT,Java2D,Acessibility,Drag&Drop以及Swing

  1. AWT:Abstract Window Toolkit,是抽象窗口工具集,包括GUI的各种组件与事件处理机制。
  2. Java 2D:Java二维图形工具,是对java.awt和java.awt.image包的扩展
  3. Accessibility:Java高级访问工具,提供了一组高级的工具帮助程序实现非常规的输入/输出,如屏幕读取器、屏幕放大器、语音处理等。
  4. Drag&Drop:拖放功能,实现Java程序与不支持Java的本地应用之间数据的交换。
  5. Swing:Swing提供了丰富的组件,并提供了独立与运行平台的GUI构造框架。Swing是纯Java实现的轻量级组件,没有本地代码,不依赖于操作系统的支持。Swing在不同的平台上都能具有一致的显示风格,并且能够提供本地窗口系统不支持的其他特性。

二、Swing简介

  • Swing提供了许多图形界面组件,除了按钮、标签、复选框、菜单等基本组件外,还增加了丰富的高层组件集合。
  • 大多数非容器Swing组件都采用一种分离模型结构。这种分离模型结构分为两部分:组件及与组件相关的数据模型。例如某个组件拥有其对应的模型来存储这些同类的组件。对于某些组件,使用分离模型结构具有很大的优点。
    (1)使程序员可以灵活地定义组件数据的存储和检索方式。
    (2)方便组件之间进行数据和状态的共享。
    (3)组件数据的变化将由模型自动传递到所有相关组件中,容易实现GUI与数据之间的同步。
  • Swing组件的外观感觉采用可设置的外观感觉。用户可以自行设置。
  • Swing组件都实现了Accessible接口,提供对非常规高级访问方式的支持,使得一些辅助输入/输出功能,如屏幕阅读器等,能够十分方便地从Swing组件中得到消息。
  • Swing支持键盘代替鼠标的操作。
  • Swing组件可以设置一个或多个边框。Swing中提供了各式各样的边框,用户可以建立组合边框或设计自己的边框。
  • 许多Swing组件上可以使用图标对其进行修饰。

三、Swing组件类层次

Swing组件是围绕一个新的组件类JComponent建立的,JComponent
类是从Container类派生的。

  • javax.swing包是Swing提供的最大包,它包含了近100个类和几十个接口。除了JTableHeader类和JTextComponent类分别在swing.table包和swing.text包中,几乎所有的Swing组件都在这个包中。
  • javax.swing.event包和AWT的event包类似,包含了事件类和监听器接口。
  • javax.swing.table包主要包括了表格组件JTable的相关类。
  • javax.swing.tree包主要包括了树组件JTree的相关类
  • javax.swing.filechooser包主要包括了JFileChooser的相关类
  • javax.swing.border包中主要包括了设置特定组件边框的类和接口
  • javax.swing.text,javax.swing.text.html,javax.swing.text.html.parser和javax.swing.text.rtf都是用于显示和编辑HTML和RTF格式文档的包
  • javax.swing.plaf,javax.swing.plaf.basic,javax.swing.plaf.metal,javax.swing.plaf.multi是实现组件各种显示L&F(组件外观感觉)的包。

四、创建基于Swing的应用程序GUI

创建一个用Swing显示的程序一般包含一下步骤

  1. 引入swing包,以及各种需要的包。
  2. 选择GUI的外观风格L&F,一般在main方法中,在创建顶层容器之前设置GUI的外观风格。
  3. 创建并设置窗口容器,创建GUI的顶层容器并进行布局管理器等设置
  4. 创建与添加Swing组件,创建所需的Swing组件,进行相应设置后添加到容器中显示。注意避免Swing组件与AWT组件混合使用,在SwingGUI中应该全部使用基于Swing的轻量级组件。
  5. 显示顶层容器,将整个GUI显示出来。
 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());JFrame frame = new JFrame("HelloWorld");final JLabel label = new JLabel("Hello World");frame.getContentPane().add(label);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(200, 70);frame.setVisible(true);

五、L&F设置

使用UIManager.setLookAndFeel()这个方法并传入参数来设置GUI的外观风格,一般这个方法调用都在第一行代码处,否则可能设置不生效。

这个方法的参数一般有:

  • 跨平台的JavaL&F:UIManager.getCrossPlatformLookAndFeelClassName()
  • 当前运行平台的L&F:UIManager.getSystemLookAndFeelClassName()
  • WindowsL&F:“com.sun.java.swing.plaf.windows.WindowsLokkAndFeel”

当GUI已经显示之后,如果需要改变L&F,仍可以调用UIManager.setLook
AndFeel(),不过需要调用SwingUtilities.updateComponentTreeUI(),传入每个顶层容器。

六、常用容器

组成GUI的组件和按钮、标签、对话框等,不能独立使用,必须放再容器内。所有的组件都可以通过add()方法向容器中添加组件。在Swing中,常用的3种类型的容器是JFrame,JPanel和JApplet。Swing GUI形成顶层容器-中间层容器-基本组件的层次包容关系。

(一)顶层容器

  • 具有Swing GUI的因公用必须至少有一个顶层容器。顶层容器提供了所包含组件需要的绘制与时间处理功能。对于多数应用,顶层容器是JFrame,JDialog或JApplet的实例。
  • 每个顶层容器都有一个内容面板(Content Pane),可能还有一个菜单条(Menu Bar),内容面板中直接或间接包含了该容器的组件。
  • Swing组件不能直接添加到顶层容器中,必须添加到一个与顶层容器相关联的内容面板中。或者建立一个JPanel或JDesktopPane等中间容器,把组件添加到中间容器中,再将该容器设置为顶层容器的内容面板。
    示例:
JFrame frame = new JFrame();
frame.getContentPane().add(new JLable("hello");

或者

JPanel contentPane = new Jpanel();
JbButton b = new JButton("确定");
contentPane.add(b);
frame.setContent(contenePane);
  • JFrame是最常用的顶层容器。
    (1)它有两个构造方法,JFrame(),JFrame(String titile)。
    (2)JFrame通过setVisible()来设置窗口是否可见
    (3)JFrame通过setDefaultCloseOperation(int operation)来设置单击关闭窗口按钮操作,可选的参数有(4)WindowConstants.DO_NOTHING_ON_CLOSE:不做任何动作
    (4)WindowConstants.HIDE_ON_CLOSE:隐藏窗口
    (5)WindowConstants.DISPOSE_ON_CLOSE:关闭窗口,释放资源
    (6)JFrame.EXIT_ON_CLOSE:退出应用系统
    (7)JFrame通过setDefaultLookAndFeelDecorated(boolean defaultLookAndFeelDecorated)来制定窗口是否使用当前Look&Feel提供的窗口装饰。窗口装饰指窗口的边框,标题以及用来关闭与最小化窗口的按钮。

(二)中间层容器

中间层容器是由通用容器构成,主要是为了简化组件的布局,常用组件为JPannel,JScrollPane,JTabbedPan等。

  • JPannel是存放轻型组件的同样能够容器,并且默认情况下是透明的,可以使用setOpaque()方法设置。JPanel的对象可以作为顶层容器的Content Pane使用。通过setLayout()方法设置JPanel的布局管理器,并向其中添加组件。
  • JScrollPane,JScrollPane类可提供轻量级组件的 scrollable 视图。JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口。

七、布局管理器

为了实现跨平台的特性并获得动态的布局效果,Java在容器设置了布局管理器负责对容器内的组件进行管理。布局管理器决定容器的布局策略以及容器内组件的排列顺序、组件大小和位置,以及当窗口移动或者调整大小之后组件如何变化等。每个容器都有一个默认的布局管理器,该布局管理器可通过调用setLayout()改变。

(一)FlowLayout

  • 流式布局管理器,容器内的组件采用从左到右,从上倒下逐行摆放。

  • 构造方法有
    FlowLayout():组件居中摆放,组件之间水平和垂直间距为5个像素
    FlowLayout(int align):组件按照参数指定的对齐方式摆放,组件之间水平和垂直间距为5个像素。参数align的取值有FlowLayout.LEFT,FlowLayout.RIGHT,FlowLayout.CENTER
    FlowLayout(int align,int hgap,int vgap):组件按照指定的对齐方式摆放,组件之间的水平间距由hgap指定,垂直间距由vgap指定。

(二)BorderLayout

  • 边界布局管理器,将容器分为五个区,East,West,South,North,Center
  • 构造方法
    BorderLayout():组件之间没有水平间隙与垂直间隙
    BorderLayout(int hgap,int vgap):指定组件之间水平间隙与垂直间隙
  • 当改变容器窗口大小的时候,各个组件的相对位置不变,组件大小改变。
  • 当向容器中加入组件时,需要指定摆放的方位,否则组件不能显示。可以通过容器类的两个add方法。
    public Component add(String name,Component comp),参数name指定方位,取值为BorderLayout.EAST,BorderLayout.WEST,BorderLayout.NORTH,BorderLayout.SOUTH
    public void add (Component comp,Object constraints),参数constraints指定方位,取值同上。

(三)GridLayout

  • 网格布局管理器,把容器分为n行n列同样大小的网格单元,每个网格单元可以容纳哦一个组件,并且此组件将充满网格单元。组件按照从左至右,从上至下的顺序填充。
  • 构造方法
  • GridLayout(),容器划分为1行1列的网格
    GridLayout(int rows,int cols),容器划分为指定行列数目的网格。当取值为 0时代表任意数目的行列。
    GridLayout(int rows,int cols,int hgap,int vgap),容器划分为指定行列数目的网格。并且指定组件间的水平与垂直间隙。

(四)CardLayout

  • 卡片布局管理器,可以使两个或者更多的组件共享同一显示控件。像卡片一样叠放,一个时刻只有最上面的组件是可见的。

  • 构造方法
    CardLayout():没有左右与上下边界间隙
    CardLayout(int hgap,int vgap):通过参数指定左右上下边界的间隙。:

  • 常用的方法有
    public void first(Container parent):显示第一张卡片
    public void next(Container parent):显示下一张卡片,如果当前卡片是最后一张,则显示打一张
    public void prevoius(Container parent):显示前一张卡片
    public void last(Container parent):显示最后一张卡片
    public void show(Container parent,String name):显示指定名称的组件

  • 当一个由CardLayout管理的容器中添加组件时,必须使用Container类下的add(String name,Component comp)方法。

(五)GridBagLayout

  • 网格包布局管理器,最复杂,最灵活的布局管理器
  • GridBagLayout所管理的每个组件都与一个GridBagConstraints类的对象相关。这个约束对象指定了组件的显示区域在网格中的位置,以及在其显示区域中应该如何摆放组件。
  • GridBagConstraints对象的定制是通过设置下列一个或多个GridBagConstraints的变量实现:
    (1)gridx,gridy:指定组件在网格中的行与列,容器中最左列的gridx=0,最上边行的gridy=0,。这两个变量的默认值是GridBagConstraints.RELATIVE,表示对应的组件将放在前面放置的组件的右边或者下面。
    (2)gridwidth,gridheight指定组件显示区域所占的列数与行数,以网格单元而不是像素为单位,默认值是1.GridBagConstraints.REMAINDER指定组件是在所在行或列的最后一个组件。而GridBagConstraints.RELATIVE指定组件是所在行或列的倒数第二个组件。
    (3)fill:指定组件填充网格的方式。可以是GridBagConstraints.NONE(默认),GridBagConstraints.HORIZONTAL(组件横向充满显示区域,但不改变组件高度)
    GridBagConstraints.VERTICAL(组件纵向充满显示区域,但不改变组件宽度)
    GrudBagConstraints.BOTH(组件横向、纵向充满其显示区域)
    (4)ipadx,ipady:指定组件显示区域的内部填充,指定组件显示区域的内部填充,即在组件最小尺寸之外需要附加的像素数。默认值是0。
    (5)insets:指定组件显示区域的外部填充,即组件与其显示区域边缘之间的控件,省略时,组件没有外部填充。
    (6)anchor:指定组件在显示区域的摆放位置。可以是GridBagConstraints.CENTER
    GridBagConstraints.NORTH
    GridBagConstraints.NORTHEAST
    GridBagConstraints.EAST
    GridBagConstraints.SOUTHEAST
    GridBagConstraints.SOUTH
    GridBagConstraints.SOUTHWEST
    GridBagConstraints.NORTHWEST
    (7)weightx,weighty:用来指定在容器大小改变时,增加或减少的控件如何在组件间分配。默认值是0,即所有的组件将巨龙在容器的中心,多余的控件放在容器边缘和网格单元之间。取值一般在0.0-1.0

(六)BoxLayout

  • 箱式布局管理器,将组件垂直摆放在一列或者水平摆放在一行中,具体由BoxLayout.X_AXIS和BoxLayout.Y_AXIS指定。

Java Swing学习相关推荐

  1. Java Swing学习:关于JButton,JLabel,JTabel的学习

    目录 项目场景: 问题描述: 解决方案: 1.如何实现表格实时更新及覆盖问题 2.如何处理JButton点击后,JLabel要正确变化 最后项目效果: 项目场景: 有学妹找我代写项目,实验内容如下图2 ...

  2. Java swing 学习笔记自用

    自用的,不是闲着无聊的建议不要看,不专业不认真不是分享态度,纯属自用. 看的b站视频:Java Swing入门课程_图形界面GUI编程_100集视频教程 讲得贼好贼细,不过时间太长了.而且没学过Jav ...

  3. 在java swing学习中出现adding a window to a container错误如何解决

    1出现该问题的主要原因是因为: 不能把一个window(顶级窗口)放到一个container(容器)中去.就是你只能将小容器放大容器中去 查询继承关系可以了解在swing中各个容器之间的继承关系,JD ...

  4. java swing开发窗体程序开发(一)GUI编程

    Java SWing就是java提供的一个类库专门用于开发窗体程序的,相对于C#的winform,java swing的开发要比C#更加麻烦,他不像C#拥有可视化的界面编辑工具 而是需要像QT一样纯代 ...

  5. java基础学习——Swing图形化用户界面编程

    GUI概述 早期计算机系统中,电脑向用户提供的是单调.枯燥.纯字符状态的"命令行界面(CLI)".就是到现在,我们还可以依稀看到它们的身影:在Windows中开个DOS窗口,就可看 ...

  6. Java Swing的简单学习

    计算机软件实习记录(第一周)--Java Swing的简单学习 Swing的认识 1)Swing是一个用于开发Java应用程序用户界面的开发工具包(GUI工具包),是JAVA基础类的一部分. 2)它包 ...

  7. Java Swing 界面学习笔记

    目录 一.Java Swing组件之间的继承关系 二.JFrame 三.JDialog 四.常用面板 五.常用的组件 1.JLabel标签组件 2.JButton按钮组件 3.菜单栏 4.文本组件 5 ...

  8. Java语言学习--Swing中Button事件监听

    1 前言 今天在使用Java Swing中的JButton的事件触发机制时遇到了许多问题,简单的了解了一下. 2 事件监听机制 事件监听的机制如下图所示分析. 3 代码分析 3.1 分步解析 1.事件 ...

  9. Java培训学习步骤有哪些

    最近几年,有很多学习java技术的同学都有过半途而废的想法,认为java零基础是很难学会的,其实出现这样的问题,最主要的原因就是学习方法有问题,下面小编整理的Java培训学习步骤,希望能够帮助大家更有 ...

最新文章

  1. c语言switch设计计算器,求助。。关于用switch编写简易计算器
  2. [转载]WPF – 使用触发器
  3. MESSAGE_TYPE_X dump in RSM_DATASTATE_CHECK -6-
  4. 第二届Byte Cup来袭,赢得2万美元奖金,登上字节跳动面试直通车
  5. h5页面如何预览excel文件_移动端页面,如何解析预览 word/excel/PDF文件?
  6. Sql Server数据库备份和恢复:原理篇
  7. leecode之aoti
  8. 我的flash头像编辑上传控件
  9. 一张图解释什么是遗传算法_什么是智慧水务决策支持系统?从一张图说起
  10. 百度mip推送工具_(教程)主动推送(实时)、熊掌号天级/周级提交、MIP提交
  11. pandas处理excel单元格合并后的列
  12. TI Zigbee Light Link 参考设计
  13. 生活小技巧:PS和word的结合使用
  14. intell idea 快速启动设置
  15. 学习一下怎么加入自己的图片,用QQShow做一下试验~~~~~~~~~~
  16. 手淘首页和猜你喜欢流量和提高店铺权重的方法技巧
  17. java javac编译与JIT编译
  18. 清华计算机系2018录取分数线,清华大学2018年各省录取分数线
  19. 论文解读:NSP-BERT: A Prompt-based Zero-Shot Learner Through an Original Pre-training Task——Next Sentence
  20. SMOJ 2202 怪物 (整体二分+BIT)

热门文章

  1. linux中的likely和unlikely
  2. 华纳云:香港服务器屏蔽美国IP地址的方式有哪些
  3. AI:2020年6月23日北京智源大会演讲分享之机器学习专题论坛  ——09:05-09:45Yolanda Gil教授《Thoughtful AI: Forging A New Partnersh》
  4. Html,JavaScript 判断浏览器的内核
  5. 《逆袭大学》文摘——7.1.2 中学生学习单片机的启发
  6. 2014年阿里校招笔试题目
  7. 安装iTunes时出现安装回滚无法安装…
  8. com.alibaba.easyexcel.support.cglib.core.CodeGenerationException
  9. 道路车辆先进驾驶辅助系统(ADAS)术语及定义
  10. 独家 | 一文读懂社交网络分析-上(附学习资源)