sidePanelLayout 侧边面板

sidePanelLayout 打开一个在主内容不同侧边或覆盖主内容的面板。

也可以使用 侧边对话框 以编程方式创建侧边面板。

XML 元素

sidePanelLayout

Java 类

SidePanelLayout

基本用法

SidePanelLayout 将页面内容分为两个区域:

  • 主内容区 – 主要的布局区域

  • 侧面板内容区 – 从某一个侧边滑入的侧边内容。

在 XML 定义时,使用 sidePanelLayout 元素,并添加两个子元素。

<sidePanelLayout id="sidePanelLayout"
                 width="100%"
                 height="100%">

    <vbox id="contentBox">
        <!-- Main content -->
    </vbox>

    <vbox id="sidePanelBox" width="100%" height="100%">

        <hbox id="headerBox" width="100%"> (1)
            <h2 text="Customer information"/>
            <sidePanelLayoutCloser/>
        </hbox>

        <!-- Side panel content -->

    </vbox>
</sidePanelLayout>

侧边面板一般会包含一个关闭按钮。使用专门的 sidePanelLayoutCloser 组件添加这个按钮。

打开侧边面板

侧边面板在用户操作时打开,比如点击按钮。需要调用 toggleSidePanel() 方法:

@ViewComponent
private SidePanelLayout sidePanelLayout;

@Subscribe(id = "toggleButton", subject = "clickListener")
public void onToggleButtonClick(final ClickEvent<JmixButton> event) {
    sidePanelLayout.toggleSidePanel();
}

调整侧面板大小

Jmix 3.1+

将 sidePanelResizable 属性设置为 true,允许用户通过拖动侧面板内侧边缘的手柄来调整其大小。

<facets>
    <settings auto="true"/>
</facets>
    <sidePanelLayout id="sidePanelLayout"
                     width="100%"
                     height="100%"
                     sidePanelResizable="true">
        <!-- ... -->
    </sidePanelLayout>
</layout>

对于 LEFT、RIGHT、INLINE_START 和 INLINE_END 位置,拖动会更改面板宽度。对于 TOP 和 BOTTOM 位置,拖动会更改面板高度。尺寸保持在最小和最大尺寸属性定义的范围内。

如需保存和恢复当前用户选择的大小,请添加 settings facet 并将其 auto 属性设置为 true。保存的大小会覆盖 XML 中定义的初始大小。水平和垂直尺寸独立保存。

侧边面板编辑器

SidePanelLayout 可以用在主从范式中,主区域显示实体列表,而侧边面板用于编辑选中的实例。

side panel layout editor

样式

使用 CSS 变量和主题选择器可以自定义 SidePanelLayout 的外观和大小。

尺寸

下列变量定义了侧面板的尺寸。可以全局设置,或在 CSS 选择器中对特定的 SidePanelLayout 设置。

在 XML 中设置或使用 Java API 设置的值会覆盖 CSS 变量。

水平侧边面板(LEFT、RIGHT、INLINE_START、INLINE_END):

变量

描述

默认值

--jmix-side-panel-layout-horizontal-size

侧边面板的默认宽度。

auto

--jmix-side-panel-layout-horizontal-max-size

最大宽度。

50%

--jmix-side-panel-layout-horizontal-min-size

最小宽度。

14em

垂直侧边面板(TOP、BOTTOM):

变量

描述

默认值

--jmix-side-panel-layout-vertical-size

侧边面板的默认高度。

auto

--jmix-side-panel-layout-vertical-max-size

最大高度。

50%

--jmix-side-panel-layout-vertical-min-size

最小高度。

10em

调整大小手柄

Jmix 3.1+

调整大小手柄使用以下 CSS 变量。其默认值与当前主题 SplitLayout 的分隔条一致,并且在使用 resizer-small 主题时可能会改变。

变量

描述

--jmix-side-panel-layout-splitter-size

垂直分隔条的宽度或水平分隔条的高度。

--jmix-side-panel-layout-splitter-target-size

分隔条上指针目标区域的大小。

--jmix-side-panel-layout-splitter-background

分隔条背景。

--jmix-side-panel-layout-handle-size

分隔条内握柄的厚度。

--jmix-side-panel-layout-handle-target-size

分隔条内握柄的长度。

--jmix-side-panel-layout-handle-background

握柄背景。

外观

变量

描述

默认值

--jmix-side-panel-layout-transition-duration

控制打开和关闭动画的时长。

200ms

parts

SidePanelLayout 开放了以下 可样式化的 parts:

部分

描述

jmix-side-panel-layout::part(layout)

内容、侧边面板和模态遮罩的容器。

jmix-side-panel-layout::part(content)

主布局内容。

jmix-side-panel-layout::part(modalityCurtain)

模态遮罩层。

jmix-side-panel-layout::part(sidePanel)

移入、移出视图的面板。

jmix-side-panel-layout::part(sidePanelContent)

侧边面板内容容器。

jmix-side-panel-layout::part(resizeHandle)

侧面板内边缘的调整手柄。

状态

组件开放了以下 状态:

状态

描述

jmix-side-panel-layout[side-panel-opened]

当侧边面板打开时使用。

jmix-side-panel-layout[modal]

当侧边面板为模态时使用。

jmix-side-panel-layout[side-panel-position='left']

匹配当前的侧边面板位置(right、top 等)。

jmix-side-panel-layout[side-panel-overlay]

当面板覆盖内容而不是推开内容时使用。

jmix-side-panel-layout[side-panel-resizable]

用户调整大小启用时使用。

jmix-side-panel-layout[resizing]

用户拖拽调整手柄时使用。

XML 属性

通用属性 对所有组件都是一样的配置。下面是 sidePanelLayout 的特殊属性:

名称 描述 默认值

sidePanelPosition

定义面板出现在哪个侧边。可选值为 LEFT、RIGHT、TOP、BOTTOM、INLINE_START 和 INLINE_END。

INLINE_START 和 INLINE_END 遵循页面的阅读方向(LTR 或 RTL)。

RIGHT

sidePanelOverlay

决定侧边面板与主内容的交互方式。

如果为 true,面板覆盖在内容上而不改变其布局。 如果为 false,面板打开时将内容推开。

true

modal

当为 true 时,侧边面板后面会出现一个模态遮罩层,并阻止与主内容的交互,直到面板关闭。

true

closeOnOutsideClick

当为 true 时,点击模态遮罩层会关闭侧边面板。

此属性仅在启用 modal 时有效。

true

overlayAriaLabel

设置覆盖元素的可访问标签。

–

displayAsOverlayOnSmallDevices

如果为 true,侧边面板在小设备上显示为全屏覆盖层,确保内容在移动布局中仍然可用。

true

sidePanelResizable

如果为 true,用户可以拖动侧面板内侧边缘的拖拽手柄来调整面板大小。面板会保持在最小和最大尺寸限制内。当面板在小型设备上切换到全屏覆盖时,不会显示调整大小的手柄。

Jmix 3.1+

false

sidePanelHorizontalSize

定义当侧边面板的位置为 LEFT、RIGHT、INLINE_START 或 INLINE_END 时的宽度。

值可以是任何有效的 CSS 尺寸,例如 400px、30% 或 auto。

auto

sidePanelHorizontalMinSize

定义水平放置的侧面板的最小宽度。

14em

sidePanelHorizontalMaxSize

定义水平放置的侧边面板的最大宽度。

50%

sidePanelVerticalSize

定义侧边面板从顶部或底部出现时的垂直尺寸。

auto

sidePanelVerticalMinSize

定义侧边面板的最小垂直尺寸。

10em

sidePanelVerticalMaxSize

定义侧边面板的最大垂直尺寸。

50%

事件和处理器

通用事件和处理器 对所有组件都是一样的配置。下面是 sidePanelLayout 的特殊事件和处理器:

名称 描述

ModalityCurtainClickEvent

当用户点击模态遮罩层时触发。

SidePanelBeforeOpenEvent

在侧边面板显示之前以及开启动画开始之前触发。使用此事件可在面板变得可见之前修改内容。

SidePanelAfterOpenEvent

在侧边面板完全打开且开启动画完成之后触发。

SidePanelCloseEvent

当侧边面板关闭时触发。

SidePanelAfterResizeEvent

当用户拖动调整的手柄完成且面板大小发生变化后触发一次。getSize() 方法返回新的宽度或高度,单位为像素。

Jmix 3.1+

XML 内部元素

一个 sidePanelLayout 包含且只能包含两个根组件:主内容和侧面板内容。如果侧面板需要一个关闭按钮,使用 sidePanelLayoutCloser 内部元素。