Tengo un JFrame con un JSplitPane que es OneTouchExpandable. Quiero recordar la última posición del Divisor del JSplitPane en JFrame disponer y restaurar la Posición si el JFrame se vuelve a abrir.Cómo establecer JSplitPane-Divider colapsar/expandir Estado?
funciona bien, pero si el usuario expanda un lado a través de la interfaz de usuario oneTouchExpandable-Widget continuación almaceno sólo el 'int'-Posición de disponer y establezca el' int'-Posición de nuevo con la consecuencia de JFrame- el cambio de tamaño del JSplitPane-Divider salta al Componente preferredSize contraído.
¿Cómo puedo obtener/configurar el estado de colapso/expansión?
EDITAR
Ahora: el cambio de tamaño en el comportamiento está bien, pero no es exactamente el mismo comportamiento como el primer tiempo abierto - porque ahora no tengo MinimumDividerLocation. Yo quería el SnapIn, pero además el 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);
}
}
sí, el cambio de tamaño en el comportamiento está bien, pero no es exactamente el mismo comportamiento como la primera vez abierta, porque ahora no tengo MinimumDividerLocation. Yo quería el SnapIn, pero además el collapsedState. – oliholz
Después de probar varias soluciones propuestas, encontré la siguiente solución para trabajar: '' pane.getRightComponent(). SetMinimumSize (new Dimension()); pane.setResizeWeight (1.0d); '' –
Eso funcionó para mí (¡gracias! :)) pero la posición del divisor no se pega al cambiar el tamaño, especialmente cuando no puede anular el tamaño mínimo del componente. Ver mi respuesta para hackear si usa 'BasicSplitPaneUI'. – Matthieu