Como definir o JSplitPane-Divider recolher / expandir o estado?
Eu tenho um JFrame com um JSplitPane que é OneTouchExpandable. Quero me lembrar da última posição do JSplitPane no JFrame e dispor e restaurar a posição se o JFrame for reaberto.
Funciona bem, mas se o usuário expandir um lado por meio do widget de interface do usuário oneTouchExpandable, eu armazenarei apenas a posição 'int' ao descartar e definir a posição 'int' novamente com a conseqüência de redimensionar o Jplame no JSplitPane-Divider pula para o Component recolhido o preferidoSize.
Como posso obter / definir o estado de recolhimento / expansão?
EDITAR
Agora: o redimensionar-comportamento está OK, mas não é exatamente o mesmo comportamento da primeira vez - porque agora não tenho MinimumDividerLocation. Eu queria o SnapIn, mas ainda mais o 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 );
}
}