🍂Swing中的特殊容器
2021-3-22
| 2023-8-3
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
Swing提供了一些具有特殊功能的容器 , 这些特殊容器可以用于创建一些更复杂的用户界面。

使用JSplitPane

JSplitPane 用于创建一个分割面板,它可以将 一个组件(通常是一个容器)分割成两个部分,并提供一个分割条 , 用户可以拖动该分割条来调整两个部分的大小。
JSplitPane使用步骤:
  1. 创建JSplitPane对象
    1. 设置是否开启连续布局的支持(可选)
      1. 设置是否支持“一触即展”的支持(可选)
        1. 其他设置
           
          案例:
          点击右侧的图书名称,在左上方显示该图书的图片,左下方显示该图书的描述
          notion image
           
           

          使用JTabledPane

          JTabbedPane可以很方便地在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器具有相同大小的组件摆放区域。通过这种方式, 就可以在一个容器里放置更多的组件 , 例如右击桌面上的" 我的电脑 “图标,在弹出的快捷菜单里单击”属性 " 菜单工页 , 就可以看 到 一个“系统属性” 对话框 ,这个对话框里包含了 若干个标签页。
          如果需要使用JTabbedPane在窗口上创建标签页 ,则可以按如下步骤进行:
          1. 创建JTabbedPane对象
            1. 通过JTabbedPane对象堆标签进行增删改查
              1. 设置当前显示的标签页
                1. 设置JTabbedPane的其他属性
                  1. 为JTabbedPane设置监听器
                     
                     
                    notion image
                     
                     
                     

                    使用JLayeredPane、JDesktopPane、JInternalFrame

                    JLayeredPane
                    JLayeredPane是 一个代表有层 次深度的容器 , 它允许组件在需要 时 互相重叠。当向JLayeredPane容器中添加组件时, 需要为该组件指定一个深度索引 , 其中层次索引较高 的层里的组件位于其他层的组件之上。
                    notion image
                    JLayeredPane 还将容器的层次深度分成几个默认层 ,程序只是将组件放入相应 的层 ,从而可以更容易地确保组件的正确重叠 , 无须为组件指定具体的深度索引。JLayeredPane 提供了如下几个默认层:
                    1. DEFAULT_LAYER:大多数组件位于标准层,这是最底层;
                    1. PALETTE_LAYER : 调色板层位于默认层之上 。该层对于浮动工具栏和调色板很有用,因此可以位于其他组件之上 。
                    1. MODAL_LAYER: 该层用于显示模式对话框。它们将出现在容器中所有工具栏 、调色板或标准组件的上面 。
                    1. POPUP_LAYER : 该层用于显示右键菜单 , 与对话框 、工具提示和普通组件关联的弹出式窗口将出现在对应的对话框、工具提示和普通组件之上。
                    1. DRAG_LAYER: 该层用于放置拖放过程中的组件(关于拖放操作请看下一节内 容) ,拖放操作中的组件位于所有组件之上 。 一旦拖放操作结束后 , 该组件将重新分配到其所属的正常层。
                    JLayeredPane 方法:
                    1. moveToBack(Component c):把当前组件c移动到所在层的所有组件的最后一个位置;
                    1. moveToFront(Component c):把当前组件c移动到所在层的所有组件的第一个位置;
                    1. setLayer(Component c, int layer):更改组件c所处的层;
                    需要注意的是,往JLayeredPane中添加组件,如果要显示,则必须手动设置该组件在容器中显示的位置以及大小。
                     
                    演示代码:
                     
                     

                    JDesktopPane和JInternalFrame

                    JDesktopPane是JLayeredPane的子类,这种容器在开发中会更常用很多应用程序都需要启动多个内部窗口来显示信息(典型的比如IDEA、NotePad++),这些内部窗口都属于同一个外部窗口,当外部窗 口 最小化时, 这些内部窗口都被隐藏起来。在 Windows 环境中,这 种用户界面被称为多文档界面 C Multiple Document Interface, MDI) 。
                    使用 Swing 可以非常简单地创建出这种 MDI 界面 , 通常,内部窗口有自己的标题栏、标题、图标、三个窗口按钮,并允许拖动改变内部窗口 的大小和位置,但内部窗口不能拖出外部窗口。
                    JDesktopPane 需要和 JIntemalFrame 结合使用,其中JDesktopPane 代表一 个虚拟桌面 ,而JIntemalFrame则用于创建内部窗口。使用 JDesktopPane 和 JIntemalFrame 创建内部窗口按如下步骤进行即可:
                    1. 创建 一 个 JDesktopPane 对象,代表虚拟桌面
                      1. 使用 JIntemalFrame 创建一个内部窗口
                        1. 一旦获得了内部窗口之后,该窗口的用法和普通窗口的用法基本相似, 一样可以指定该窗口的布局管理器, 一样可以向窗口内添加组件、改变窗口图标等。
                        1. 将该内部窗口以合适大小、在合适位置显示出来 。与普通窗口类似的是, 该窗口默认大小是 0x0像素,位于0,0 位置(虚拟桌面的左上角处),并且默认处于隐藏状态,程序可以通过如下代码将内部窗口显示出来:
                          1. 将内部窗口添加到 JDesktopPane 容器中,再将 JDesktopPane 容器添加到其他容器中。
                           
                          演示代码:
                           
                        2. Java
                        3. Java-GUI
                        4. EnumMap和TreeMap函数
                          目录