【问题标题】:JSplitPane set resizable falseJSplitPane 设置可调整大小的 false
【发布时间】:2011-08-15 13:10:43
【问题描述】:

如何将JSplitPane 设置为可调整大小的false?我不想调整JSplitPane 的大小,我将它用作此窗格的边框。有没有其他方法可以创建相同的边框结构以将面板垂直分成两部分。

【问题讨论】:

  • 禁用拆分窗格。见下文。

标签: java swing border


【解决方案1】:

为了防止用户调整窗格大小,您还可以将分隔线大小设置为零。

splitPane.setDividerSize(0);

【讨论】:

    【解决方案2】:
    splitPane.setEnabled( false );
    

    【讨论】:

    • 但是使用 nimbus 如果禁用它,我看不到边框。 :(
    • 这个解决方案简单又好用
    • 如果子组件继承了启用/禁用的父状态,这将禁用子组件。例如一个 jlist 可能被禁止被选中。
    • @Mgamerz,一个 JList 在 Windows 7 上使用 JDK8 对我来说很好用。 setEnabled() 方法仅适用于组件,不适用于子组件。例如,请参阅 How to Use Split Panes 上的 Swing 教程,了解 JList 的示例。
    • @camickr 当我禁用此拆分窗格时,我的一些子组件不再可选。我无法在 Jlist 中选择项目,并且子拆分窗格没有光标更改以指示它仍然是可移动的。删除禁用使其再次正常工作。
    【解决方案3】:
    final double pos = split.getDividers().get(0).getPosition();
    split.getDividers().get(0).positionProperty().addListener(new ChangeListener<Number>() {
        @Override
        public void changed(ObservableValue<? extends Number> arg0,
                Number arg1, Number arg2) {
            split.getDividers().get(0).setPosition(pos);
        }
    });
    

    【讨论】:

      【解决方案4】:

      您可以覆盖 JSplitPane 方法 getDividerLocation()getLastDividerLocation 并返回一个常量值。

      JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT){
          private final int location = 100;
          {
              setDividerLocation( location );
          }
          @Override
          public int getDividerLocation() {
              return location ;
          }
          @Override
          public int getLastDividerLocation() {
              return location ;
          }
      };
      

      【讨论】:

      • @Tapas Bose,无需扩展拆分窗格类。
      • @camickr 但这正是这个解决方案所做的,它使用匿名类扩展了 JSpiltPane。
      【解决方案5】:

      考虑将Compound BordersEtchedBorder 一起使用

      【讨论】:

        【解决方案6】:

        正如@camickr answer cmets 所说,禁用整个拆分窗格可以禁用包含的组件交互行为(例如,它们不会在悬停时显示交互光标)

        相反,如果使用 BasicSplitPaneUI,您可以从 UI 中禁用分隔符

        public class MySplitPane extends JSplitPane {
        
            public void setResizable(boolean resizable) {
                BasicSplitPaneUIui = (BasicSplitPaneUI) this.getUI();
                ui.getDivider().setEnabled(resizable);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2018-02-06
          • 1970-01-01
          • 2013-08-04
          • 2012-01-05
          • 2023-03-09
          • 1970-01-01
          • 1970-01-01
          • 2011-06-17
          • 2018-04-20
          相关资源
          最近更新 更多