Module java.desktop
Package javax.swing

Class JSplitPane

所有已实现的接口:
ImageObserver, MenuContainer, Serializable, Accessible

@JavaBean(defaultProperty="UI") public class JSplitPane extends JComponent implements Accessible
JSplitPane 用于分隔两个(仅限两个)Component。这两个Component在外观实现的基础上被图形化分隔,然后用户可以交互地调整这两个Component的大小。有关如何使用JSplitPane的信息,请参阅The Java Tutorial中的How to Use Split Panes

拆分窗格中的两个Component可以使用JSplitPane.HORIZONTAL_SPLIT左右对齐,或使用JSplitPane.VERTICAL_SPLIT上下对齐。更改Component的大小的首选方法是调用setDividerLocation,其中location是新的x或y位置,取决于JSplitPane的方向。

要将Component的大小调整为其首选大小,请调用resetToPreferredSizes

当用户调整Component的大小时,将使用Components的最小大小来确定Component可以设置到的最大/最小位置。如果两个组件的最小大小大于拆分窗格的大小,则分隔符将不允许您调整大小。要更改JComponent的最小大小,请参见JComponent.setMinimumSize(java.awt.Dimension)

当用户调整拆分窗格时,新空间根据resizeWeight属性在两个组件之间分配。值为0(默认值)表示右/底部组件获得所有空间,而值为1表示左/顶部组件获得所有空间。

警告: Swing 不是线程安全的。有关更多信息,请参阅Swing的线程策略

警告: 该类的序列化对象将不兼容未来的Swing版本。当前的序列化支持适用于短期存储或在运行相同版本Swing的应用程序之间的RMI。从1.4开始,已将所有JavaBeans的长期存储支持添加到java.beans包中。请参见XMLEncoder

自 JDK 版本:
1.2
参见:
  • Field Details

    • VERTICAL_SPLIT

      public static final int VERTICAL_SPLIT
      垂直拆分表示Component沿y轴拆分。例如,两个Component将垂直拆分。
      参见:
    • HORIZONTAL_SPLIT

      public static final int HORIZONTAL_SPLIT
      水平拆分表示Component沿x轴拆分。例如,两个Component将水平拆分。
      参见:
    • LEFT

      public static final String LEFT
      用于在另一个Component左侧添加一个Component
      参见:
    • TOP

      public static final String TOP
      用于在另一个Component上方添加一个Component
      参见:
    • BOTTOM

      public static final String BOTTOM
      用于在另一个Component下方添加一个Component
      参见:
    • DIVIDER

      public static final String DIVIDER
      用于添加表示分隔线的Component
      参见:
    • ORIENTATION_PROPERTY

      public static final String ORIENTATION_PROPERTY
      方向(水平或垂直)的绑定属性名称。
      参见:
    • CONTINUOUS_LAYOUT_PROPERTY

      public static final String CONTINUOUS_LAYOUT_PROPERTY
      连续布局的绑定属性名称。
      参见:
    • DIVIDER_SIZE_PROPERTY

      public static final String DIVIDER_SIZE_PROPERTY
      边框的绑定属性名称。
      参见:
    • ONE_TOUCH_EXPANDABLE_PROPERTY

      public static final String ONE_TOUCH_EXPANDABLE_PROPERTY
      oneTouchExpandable的绑定属性。
      参见:
    • LAST_DIVIDER_LOCATION_PROPERTY

      public static final String LAST_DIVIDER_LOCATION_PROPERTY
      lastLocation的绑定属性。
      参见:
    • DIVIDER_LOCATION_PROPERTY

      public static final String DIVIDER_LOCATION_PROPERTY
      dividerLocation的绑定属性。
      自JDK版本:
      1.3
      参见:
    • RESIZE_WEIGHT_PROPERTY

      public static final String RESIZE_WEIGHT_PROPERTY
      weight的绑定属性。
      自JDK版本:
      1.3
      参见:
    • orientation

      protected int orientation
      视图如何分割。
    • continuousLayout

      protected boolean continuousLayout
      调整大小时是否连续重新显示视图。
    • leftComponent

      protected Component leftComponent
      左侧或顶部组件。
    • rightComponent

      protected Component rightComponent
      右侧或底部组件。
    • dividerSize

      protected int dividerSize
      分隔线的大小。
    • oneTouchExpandable

      protected boolean oneTouchExpandable
      是否提供一个小部件以快速展开/折叠分隔窗格?
    • lastDividerLocation

      protected int lastDividerLocation
      分隔窗格的先前位置。
  • Constructor Details

    • JSplitPane

      public JSplitPane()
      创建一个新的JSplitPane,配置为水平并排排列子组件,使用两个按钮用于组件。
    • JSplitPane

      @ConstructorProperties("orientation") public JSplitPane(int newOrientation)
      创建一个具有指定方向的新的JSplitPane
      参数:
      newOrientation - JSplitPane.HORIZONTAL_SPLITJSplitPane.VERTICAL_SPLIT
      抛出:
      IllegalArgumentException - 如果orientation不是HORIZONTAL_SPLIT或VERTICAL_SPLIT之一。
    • JSplitPane

      public JSplitPane(int newOrientation, boolean newContinuousLayout)
      创建一个具有指定方向和重绘样式的新的JSplitPane
      参数:
      newOrientation - JSplitPane.HORIZONTAL_SPLITJSplitPane.VERTICAL_SPLIT
      newContinuousLayout - 一个布尔值,为true表示组件在分隔线位置改变时连续重绘,为false表示等到分隔线位置停止改变再重绘
      抛出:
      IllegalArgumentException - 如果orientation不是HORIZONTAL_SPLIT或VERTICAL_SPLIT之一
    • JSplitPane

      public JSplitPane(int newOrientation, Component newLeftComponent, Component newRightComponent)
      创建一个具有指定方向和指定组件的新的JSplitPane
      参数:
      newOrientation - JSplitPane.HORIZONTAL_SPLITJSplitPane.VERTICAL_SPLIT
      newLeftComponent - 将出现在水平分割窗格左侧或垂直分割窗格顶部的Component
      newRightComponent - 将出现在水平分割窗格右侧或垂直分割窗格底部的Component
      抛出:
      IllegalArgumentException - 如果orientation不是HORIZONTAL_SPLIT或VERTICAL_SPLIT之一
    • JSplitPane

      public JSplitPane(int newOrientation, boolean newContinuousLayout, Component newLeftComponent, Component newRightComponent)
      创建一个具有指定方向、重绘样式和指定组件的新的JSplitPane
      参数:
      newOrientation - JSplitPane.HORIZONTAL_SPLITJSplitPane.VERTICAL_SPLIT
      newContinuousLayout - 一个布尔值,为true表示组件在分隔线位置改变时连续重绘,为false表示等到分隔线位置停止改变再重绘
      newLeftComponent - 将出现在水平分割窗格左侧或垂直分割窗格顶部的Component
      newRightComponent - 将出现在水平分割窗格右侧或垂直分割窗格底部的Component
      抛出:
      IllegalArgumentException - 如果orientation不是HORIZONTAL_SPLIT或VERTICAL_SPLIT之一
  • Method Details

    • setUI

      public void setUI(SplitPaneUI ui)
      设置渲染此组件的L&F对象。
      参数:
      ui - SplitPaneUI L&F对象
      参见:
    • getUI

      @BeanProperty(bound=false, expert=true, description="The L&F object that renders this component.") public SplitPaneUI getUI()
      返回提供当前外观和感觉的SplitPaneUI
      覆盖:
      getUI 在类 JComponent
      返回:
      渲染此组件的SplitPaneUI对象
    • updateUI

      public void updateUI()
      来自UIManager的通知,L&F已更改。使用来自UIManager的最新版本替换当前UI对象。
      覆盖:
      updateUI 在类 JComponent
      参见:
    • getUIClassID

      @BeanProperty(bound=false, expert=true, description="A string that specifies the name of the L&F class.") public String getUIClassID()
      返回渲染此组件的L&F类的名称。
      覆盖:
      getUIClassID 在类 JComponent
      返回:
      字符串"SplitPaneUI"
      参见:
    • setDividerSize

      @BeanProperty(description="The size of the divider.") public void setDividerSize(int newSize)
      设置分隔线的大小。忽略分隔线大小newSize < 0
      参数:
      newSize - 以像素为单位给出分隔线的大小的整数
    • getDividerSize

      public int getDividerSize()
      返回分隔线的大小。
      返回:
      以像素为单位给出分隔线的大小的整数
    • setLeftComponent

      public void setLeftComponent(Component comp)
      设置分隔线左侧(或上方)的组件。
      参数:
      comp - 要显示在该位置的Component
    • getLeftComponent

      @BeanProperty(bound=false, preferred=true, description="The component to the left (or above) the divider.") public Component getLeftComponent()
      返回分隔线左侧(或上方)的组件。
      返回:
      在该位置显示的Component
    • setTopComponent

      @BeanProperty(bound=false, description="The component above, or to the left of the divider.") public void setTopComponent(Component comp)
      设置分隔线上方或左侧的组件。
      参数:
      comp - 要显示在该位置的Component
    • getTopComponent

      public Component getTopComponent()
      返回分隔线上方或左侧的组件。
      返回:
      在该位置显示的Component
    • setRightComponent

      @BeanProperty(bound=false, preferred=true, description="The component to the right (or below) the divider.") public void setRightComponent(Component comp)
      设置分隔线右侧(或下方)的组件。
      参数:
      comp - 要显示在该位置的Component
    • getRightComponent

      public Component getRightComponent()
      返回分隔线右侧(或下方)的组件。
      返回:
      在该位置显示的Component
    • setBottomComponent

      @BeanProperty(bound=false, description="The component below, or to the right of the divider.") public void setBottomComponent(Component comp)
      设置分隔线下方或右侧的组件。
      参数:
      comp - 要显示在该位置的Component
    • getBottomComponent

      public Component getBottomComponent()
      返回分隔线下方或右侧的组件。
      返回:
      在该位置显示的Component
    • setOneTouchExpandable

      @BeanProperty(description="UI widget on the divider to quickly expand/collapse the divider.") public void setOneTouchExpandable(boolean newValue)
      设置oneTouchExpandable属性的值,必须为true才能使JSplitPane提供一个UI小部件在分隔线上快速展开/折叠分隔线。此属性的默认值为false。某些外观和感觉可能不支持一键展开;它们将忽略此属性。
      参数:
      newValue - true表示分隔窗格应提供折叠/展开小部件
      参见:
    • isOneTouchExpandable

      public boolean isOneTouchExpandable()
      获取oneTouchExpandable属性。
      返回:
      oneTouchExpandable属性的值
      参见:
    • setLastDividerLocation

      @BeanProperty(description="The last location the divider was at.") public void setLastDividerLocation(int newLastLocation)
      设置分隔条最后位置为newLastLocation
      参数:
      newLastLocation - 一个整数,指定分隔条位置在像素中的最后位置,从面板的左侧(或上侧)到分隔条的左侧(或上侧)
    • getLastDividerLocation

      public int getLastDividerLocation()
      返回分隔条最后位置。
      返回:
      一个整数,指定分隔条位置作为像素计数,从面板的左侧(或上侧)到分隔条的左侧(或上侧)
    • setOrientation

      @BeanProperty(enumerationValues={"JSplitPane.HORIZONTAL_SPLIT","JSplitPane.VERTICAL_SPLIT"}, description="The orientation, or how the splitter is divided.") public void setOrientation(int orientation)
      设置分隔器的方向,或者分隔器如何分隔。选项包括:
      • JSplitPane.VERTICAL_SPLIT(组件上方/下方的方向)
      • JSplitPane.HORIZONTAL_SPLIT(组件左侧/右侧的方向)
      参数:
      orientation - 一个整数,指定方向
      抛出:
      IllegalArgumentException - 如果方向不是HORIZONTAL_SPLIT或VERTICAL_SPLIT之一。
    • getOrientation

      public int getOrientation()
      返回方向。
      返回:
      一个整数,表示方向
      参见:
    • setContinuousLayout

      @BeanProperty(description="Whether the child components are continuously redisplayed and laid out during user intervention.") public void setContinuousLayout(boolean newContinuousLayout)
      设置continuousLayout属性的值,必须为true,以便在用户干预期间连续重新显示和布局子组件。此属性的默认值取决于外观和感觉。某些外观和感觉可能不支持连续布局;它们将忽略此属性。
      参数:
      newContinuousLayout - 如果组件应在分隔条位置更改时连续重绘,则为true
      参见:
    • isContinuousLayout

      public boolean isContinuousLayout()
      获取continuousLayout属性。
      返回:
      continuousLayout属性的值
      参见:
    • setResizeWeight

      @BeanProperty(description="Specifies how to distribute extra space when the split pane resizes.") public void setResizeWeight(double value)
      指定在分割窗格大小更改时如何分配额外空间。值为0(默认值)表示右侧/底部组件获得所有额外空间(左侧/顶部组件固定),而值为1表示左侧/顶部组件获得所有额外空间(右侧/底部组件固定)。具体来说,左侧/顶部组件获得(权重*差异)额外空间,右侧/底部组件获得(1-权重)*差异额外空间。
      参数:
      value - 如上所述
      抛出:
      IllegalArgumentException - 如果value小于0或大于1
      自:
      1.3
    • getResizeWeight

      public double getResizeWeight()
      返回确定如何分配额外空间的数字。
      返回:
      在调整分割窗格大小时如何分配额外空间
      自:
      1.3
    • resetToPreferredSizes

      public void resetToPreferredSizes()
      根据子组件的首选大小布局JSplitPane布局。这可能会导致更改分隔条位置。
    • setDividerLocation

      @BeanProperty(description="The location of the divider.") public void setDividerLocation(double proportionalLocation)
      将分隔条位置设置为JSplitPane大小的百分比。

      此方法是基于setDividerLocation(int)实现的。此方法立即根据当前大小更改分割窗格的大小。如果分割窗格没有正确实现并显示在屏幕上,则此方法将不起作用(新的分隔条位置将变为(当前大小*比例位置),即0)。

      参数:
      proportionalLocation - 一个双精度浮点值,指定百分比,从零(顶部/左侧)到1.0(底部/右侧)
      抛出:
      IllegalArgumentException - 如果指定位置小于0或大于1.0
    • setDividerLocation

      @BeanProperty(description="The location of the divider.") public void setDividerLocation(int location)
      设置分隔条位置。这将传递给外观和感觉实现,然后通知侦听器。小于0的值意味着分隔条应重置为尝试遵守左侧/顶部组件的首选大小的值。通知侦听器后,通过setLastDividerLocation更新最后的分隔条位置。
      参数:
      location - 一个整数,指定UI特定值(通常是像素计数)
    • getDividerLocation

      public int getDividerLocation()
      返回传递给setDividerLocation的最后一个值。从此方法返回的值可能与实际分隔条位置不同(如果setDividerLocation传递的值大于当前大小)。
      返回:
      一个整数,指定分隔条的位置
    • getMinimumDividerLocation

      @BeanProperty(bound=false, description="The minimum location of the divider from the L&F.") public int getMinimumDividerLocation()
      从外观和感觉实现返回分隔条的最小位置。
      返回:
      一个整数,指定最小位置的UI特定值(通常是像素计数);如果UI为null,则返回-1
    • getMaximumDividerLocation

      @BeanProperty(bound=false) public int getMaximumDividerLocation()
      从外观和感觉实现返回分隔条的最大位置。
      返回:
      一个整数,指定最大位置的UI特定值(通常是像素计数);如果UI为null,则返回-1
    • remove

      public void remove(Component component)
      从面板中移除子组件component。根据需要重置leftComponentrightComponent实例变量。
      覆盖:
      remove 在类 Container
      参数:
      component - 要移除的Component
      参见:
    • remove

      public void remove(int index)
      从指定索引处移除Component。根据需要更新leftComponentrightComponent实例变量,然后发送消息给父类。
      覆盖:
      remove 在类 Container
      参数:
      index - 指定要移除的组件的整数,其中1指定左侧/顶部组件,2指定右侧/底部组件
      参见:
    • removeAll

      public void removeAll()
      从分割窗格中移除所有子组件。重置leftComonentrightComponent实例变量。
      覆盖:
      removeAll 在类 Container
      参见:
    • isValidateRoot

      @BeanProperty(hidden=true) public boolean isValidateRoot()
      返回true,以便在此JSplitPane的任何后代上调用revalidate将导致排队请求,该请求将验证JSplitPane及其所有后代。
      覆盖:
      isValidateRoot 在类 JComponent
      返回:
      true
      参见:
    • addImpl

      protected void addImpl(Component comp, Object constraints, int index)
      将指定的组件添加到此分割窗格。如果constraints标识左侧/顶部或右侧/底部子组件,并且先前添加了具有该标识符的组件,则将删除该组件,然后将comp添加到相应位置。如果constraints不是已知标识符之一,则布局管理器可能会抛出IllegalArgumentException

      可能的约束对象(字符串)为:

      • JSplitPane.TOP
      • JSplitPane.LEFT
      • JSplitPane.BOTTOM
      • JSplitPane.RIGHT
      如果constraints对象为null,则组件将添加到第一个可用位置(如果打开,则为左侧/顶部,否则为右侧/底部)。
      覆盖:
      addImpl 在类 Container
      参数:
      comp - 要添加的组件
      constraints - 指定此组件的布局约束(位置)的Object
      index - 指定容器列表中的索引的整数
      抛出:
      IllegalArgumentException - 如果constraints对象与现有组件不匹配
      参见:
    • paintChildren

      protected void paintChildren(Graphics g)
      子类化以在调用super之后通过finishedPaintingChildren消息UI,以及绘制边框。
      覆盖:
      paintChildren 在类 JComponent
      参数:
      g - 用于绘制的Graphics上下文
      参见:
    • paramString

      protected String paramString()
      返回此JSplitPane的字符串表示形式。此方法仅用于调试目的,返回的字符串的内容和格式可能因实现而异。返回的字符串可能为空,但不能为null
      覆盖:
      paramString 在类 JComponent
      返回:
      JSplitPane的字符串表示形式
    • getAccessibleContext

      @BeanProperty(bound=false, expert=true, description="The AccessibleContext associated with this SplitPane.") public AccessibleContext getAccessibleContext()
      获取与此JSplitPane关联的AccessibleContext。对于分割窗格,AccessibleContext采用AccessibleJSplitPane的形式。如有必要,将创建一个新的AccessibleJSplitPane实例。
      指定者:
      getAccessibleContext 在接口 Accessible
      覆盖:
      getAccessibleContext 在类 Component
      返回:
      作为此JSplitPane的AccessibleContext的AccessibleJSplitPane