JSplitPane设置不可调整大小

10

如何使JSplitPane不可调整大小?我不想调整JSplitPane的大小,我只是希望将其用作面板的边框。是否有其他方法可以创建相同的边框结构,将面板垂直分成两部分。


3
禁用分割窗格。见下文。 - camickr
7个回答

27
splitPane.setEnabled( false );

但是使用Nimbus,如果禁用了边框,我就看不到它了。 :( - oliholz
这个解决方案简单而棒。 - lajos.cseppento
2
如果子组件继承了父组件的启用/禁用状态,则会禁用子组件。例如,JList 可能无法被选择。 - Mgamerz
1
@Mgamerz,在Windows 7上使用JDK8,JList对我来说运行良好。 setEnabled()方法仅适用于组件,而不适用于子组件。例如,请参阅Swing教程中的如何使用分割窗格 ,其中包含一个JList示例。 - camickr
@camickr 当我禁用这个分割窗格时,我的一些子组件就无法选择了。我无法在Jlist中选择项目,而子分割窗格没有光标变化来指示它是可移动的,尽管它仍然是可移动的。移除禁用后,它可以正常工作。 - Mgamerz
@Mgamerz,您有一些自定义代码无法正常工作。我给了您一个Swing教程的演示代码链接,并且我已经声明它对我来说可以正常工作。如果教程代码不起作用,那么您可能遇到了版本/操作系统错误。这不是启用设计的方式。也就是说,您不能在JPanel上使用disabled来禁用面板上的所有组件。如果您有问题,请创建一个适当的SSCCE并在论坛上发布一个真正的问题。仅仅声称某些东西无法工作而不发布代码是没有意义的。这很可能是您的代码问题,而不是Swing的问题。 - camickr

7

您可以重写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
1
@camickr 但这正是此解决方案所做的,它使用匿名类扩展了 JSpiltPane。 - Dude Dawg

7

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

splitPane.setDividerSize(0);

3

2
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);
    }
});

1
如@camickr答案评论中所述,禁用整个拆分窗格可能会禁用包含组件的交互行为(例如,它们不会在悬停时显示交互式光标)
相反,如果使用BasicSplitPaneUI,则可以从UI中禁用分隔器。
public class MySplitPane extends JSplitPane {

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

0

@TrogloGeek的答案最好,可以避免与禁用的分割窗格出现问题。

例如,如果您想要创建一个“one touch expandable”的窗格,但不可调整大小,您可以使用以下代码:

public class FixedExpandableSplitPane extends JSplitPane {

    public FixedExpandableSplitPane(int orientation) {
        super(orientation);
        setOneTouchExpandable(true);
        BasicSplitPaneUI ui = (BasicSplitPaneUI) this.getUI();
        ui.getDivider().setEnabled(false);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接