gpt4 book ai didi

java - 如何在交换组件时锁定 JSplitPane 分隔线?

转载 作者:行者123 更新时间:2023-12-01 05:41:26 24 4
gpt4 key购买 nike

我有一个简单的扩展 JSplitPane,我可以在需要时在不同的时间设置不同的面板。具体来说,我将其分为上下两个部分,并且经常交换底部部分。每次我这样做时,我都会将 slider 位置重置为我想要的位置,但有时它会跳出并重新定位到屏幕顶部(并非总是如此)。

这是我的代码:

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()”方法来交换底部面板。有没有办法告诉 slider 留在我放置它的位置,无论面板的首选尺寸如何,或者如果没有,我如何让面板知道如何塑造自己以适应?感谢您的任何/所有建议!

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

最佳答案

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

setDividerLocation(height / 4 * 3);

每次添加组件时,我都会将其替换为:

setResizeWeight(0.66);

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

关于java - 如何在交换组件时锁定 JSplitPane 分隔线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com