У меня есть JFrame с JSplitPane, который является OneTouchExpandable. Я хочу помнить, что последнее положение разделителя JSplitPane на JFrame уничтожает и восстанавливает позицию, если JFrame снова открывается.Как установить JSplitPane-Divider свернуть/развернуть состояние?
Он работает хорошо, но если пользователь расширяет одну сторону через oneTouchExpandable UI-Widget, то Я сохраняю только «int'-Position on dispose» и снова устанавливаю «int'-Position» с последствием на JFrame- изменение размера JSplitPane-Divider переходит к свернутому Component preferredSize.
Как я могу получить/установить состояние свернуть/развернуть?
EDIT
Сейчас: изменения размера, поведение в порядке, но это не точно такое же поведение, как в первый раз открыть - Потому что сейчас у меня нет MinimumDividerLocation. Мне нужен SnapIn, но дальше - collapsedState.
public class SplitPaneState {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new SplitPaneState().createAndSowGUI();
}
});
}
private int position = -1;
private Dimension size = new Dimension(500, 300);
private void createAndSowGUI() {
final JFrame frame = new JFrame("frame");
frame.setSize(200, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.getContentPane().add(new JButton(new AbstractAction(){
{
putValue(Action.NAME, "Open Dialog");
}
@Override
public void actionPerformed(ActionEvent e) {
final JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JLabel("left Component"), new JLabel("right Component"));
splitPane.setContinuousLayout(true);
splitPane.setOneTouchExpandable(true);
if(position != -1) {
boolean LeftIsCollapsed = position < splitPane.getMinimumDividerLocation();
if(LeftIsCollapsed) {
splitPane.getLeftComponent().setMinimumSize(new Dimension()); // fix by Martijn Courteaux
splitPane.setDividerLocation(0.0d); // fix by Martijn Courteaux
}else {
splitPane.setDividerLocation(position);
}
}
JDialog dialog = new JDialog(frame,"dialog"){
@Override
public void dispose() {
position = splitPane.getDividerLocation();
size = this.getSize();
super.dispose();
}
};
dialog.setSize(size);
dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
dialog.setLocationRelativeTo(frame);
dialog.getContentPane().add(splitPane);
dialog.setVisible(true);
}
}
));
frame.setVisible(true);
}
}
да, изменение размера, поведение в порядке, но это не точно такое же поведение как впервые открытое - причина теперь у меня нет MinimumDividerLocation. Мне нужен SnapIn, но дальше - collapsedState. – oliholz
После того, как вы попробовали различные предлагаемые решения, я нашел следующее решение для работы: '' pane.getRightComponent(). SetMinimumSize (new Dimension()); pane.setResizeWeight (1.0d); '' –
Это сработало для меня (спасибо! :)), но позиция разделителя не прилипает при изменении размера, особенно когда вы не можете переопределить минимальный размер компонента. См. Мой ответ, чтобы взломать его, если вы используете 'BasicSplitPaneUI'. – Matthieu