Ho un JFrame con un JSplitPane che è OneTouchExpandable. Voglio ricordare l'ultima posizione di Divider di JSplitPane su JFrame e ripristinare la posizione se viene riaperto il JFrame.Come impostare JSplitPane-Divider comprimere/espandere stato?
funziona bene, ma se l'utente espandere un lato attraverso il oneTouchExpandable UI-Widget poi ho memorizzare solo il 'int'-Posizione sulla smaltire e impostare il' int'-Position di nuovo con la conseguenza sul JFrame- il ridimensionamento di JSplitPane-Divider salta al preferredSize del componente compresso.
Come posso ottenere/impostare la compressione/espandi stato?
EDIT
Ora: il ridimensionamento-comportamento è OK, ma non è esattamente lo stesso comportamento come la prima volta aperta - perché ora non ho MinimumDividerLocation. Volevo lo SnapIn, ma ulteriormente il 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ì, il ridimensionamento-Behavior è OK, ma non è esattamente lo stesso comportamento come la prima volta aperta - perché ora non ho MinimumDividerLocation. Volevo lo SnapIn, ma ulteriormente il collapsedState. – oliholz
Dopo aver provato varie soluzioni proposte, ho trovato la seguente soluzione funzionante: '' pane.getRightComponent(). SetMinimumSize (new Dimension()); pane.setResizeWeight (1.0 d); '' –
Questo ha funzionato per me (grazie! :)) ma la posizione del divisore non si attacca quando ridimensionata, specialmente quando non è possibile sovrascrivere la dimensione minima del componente. Vedi la mia risposta per hackerarlo se usi 'BasicSplitPaneUI'. – Matthieu