如何锁定JSplitPane分隔器时,交换组件



我有一个简单的扩展JSplitPane,我在需要的不同时间设置不同的面板。具体地说,我把它分成上下两个部分,并频繁地替换下一部分。每次我都重置滑块位置到我想要的位置,但有时它会跳出并重新定位到屏幕顶部(并非总是如此)。

下面是我的代码:

public class MainPanel extends JSplitPane{
    public Screen screen;
    public int height;
    public ControlPanel curPanel;
    public MainPanel(Screen screen, int height){
        super(JSplitPane.VERTICAL_SPLIT);
        this.screen = screen;
        this.height = height;
        setDividerSize(2);
        setEnabled(false);
        setTopComponent(screen);
        setToInitControls();
    }
    public void setToInitControls(){
        InitControls initCtrls = new InitControls(this);
        setBottomComponent(initCtrls);
        curPanel = initCtrls;
        setDividerLocation(height / 4 * 3);
    }
    public void setToConfigControls(){
        ConfigControls configCtrls = new ConfigControls(this);
        setBottomComponent(configCtrls);
        curPanel = configCtrls;
        setDividerLocation(height / 4 * 3);
    }
    public void setToWaitControls(){
        WaitControls waitCtrls = new WaitControls(this);
        setBottomComponent(null);
        setBottomComponent(waitCtrls);
        curPanel = waitCtrls;
        setDividerLocation(height / 4 * 3);
    }
    //and so on (I have more methods like these further down)
    //OVERRIDES: I figured overriding these might help. It didn't.
    @Override
    public int getMinimumDividerLocation(){
        return (height / 4 * 3);
    }
    @Override
    public int getMaximumDividerLocation(){
        return (height / 4 * 3);
    }
}

基本上,我使用"setTo…Controls()"方法来交换底部面板。是否有一种方法可以告诉滑块保持在我放置它的地方,而不管面板的首选尺寸,或者如果没有,我如何让面板知道如何塑造自己来适应?谢谢你的建议!

编辑:我应该注意到这些面板不使用布局。它们是自定义面板,我在上面使用鼠标/键盘监听器,并使用我自己的图形来绘制它们。

我找到了解决方案,感谢上面的链接。其实很简单。而不是使用

setDividerLocation(height / 4 * 3);

每次我添加一个组件时,我只是用:

setResizeWeight(0.66);

在构造函数中这样做了一次,就再也不会困扰我了。0.66是相当于h/4*3的小数位(我只是试错了)。

相关内容

  • 没有找到相关文章

最新更新