У меня есть простая расширенная 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 ()", чтобы поменять местами нижние панели. Есть ли способ сказать ползунку, чтобы он оставался на том же месте, где я его разместил, независимо от предпочтительных размеров панели, или, если нет, как заставить панели знать, в какую форму они вписываются? Спасибо за любые предложения!
РЕДАКТИРОВАТЬ: я должен отметить, что эти панели не используют макеты. Это пользовательские панели, на которых я использую мышь / клавиатуру и рисую поверх них собственную графику.