¿Cómo configurar JSplitPane-Divider colapsar / expandir estado?

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.

Funciona bien, pero si el usuario expande un lado a través del widget de interfaz de usuario oneTouchExpandable, entonces almaceno solo la 'posición int' al desechar y vuelvo a establecer la posición 'int' con la consecuencia de cambiar el tamaño de JFrame al cambiar el tamaño del divisor JSplitPane salta al Componente colapsado PreferredSize.

¿Cómo puedo obtener / configurar el estado de colapso / expansión?

EDITAR

Ahora: el comportamiento de cambio de tamaño está bien, pero no es exactamente el mismo comportamiento que el de abrir por primera vez, porque ahora no tengo la ubicación mínima del divisor. Quería el SnapIn pero aún más el Estado colapsado.

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 );
    }
}

Respuestas a la pregunta(7)

Su respuesta a la pregunta