Я использую JXMultiSplitPane и хочу сохранить соответствующее определение макета, когда пользователь закрывает окно.У меня проблема в том, что я не могу найти способ получения фактического определения макета, например, скорректированных весовых коэффициентов макета.
Если вы запустите приведенный ниже код, он печатает определение модели при открытии окна, которое каквы ожидаете совпадения с определением в layoutDef, а также при закрытии окна.Если, когда окно открыто, вы перетаскиваете разделители, я ожидаю, что веса будут скорректированы по мере их перемещения, но распечатанное определение не изменилось.
Кто-нибудь знает, можете ли вы получить фактические веса, а не то, что они были при создании JXMultiSplitPane, чтобы вы могли сохранить настройки в следующий раз, когда пользователь откроет то же окно?
package com.jf.example;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXMultiSplitPane;
import org.jdesktop.swingx.MultiSplitLayout;
public class App
{
public static void main( String[] args )
{
SwingUtilities.invokeLater(() -> {
final JXMultiSplitPane msp = new JXMultiSplitPane();
final String layoutDef = "(COLUMN (ROW weight=0.8 (COLUMN weight=0.25 " +
"(LEAF name=left.top weight=0.5) (LEAF name=left.middle weight=0.5))" +
"(LEAF name=editor weight=0.75)) (LEAF name=bottom weight=0.2))";
final MultiSplitLayout multiSplitLayout = new MultiSplitLayout(MultiSplitLayout.parseModel(layoutDef));
msp.setLayout(multiSplitLayout);
JFrame frame = new JFrame("FrameDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
MultiSplitLayout.printModel(multiSplitLayout.getModel());
}
});
msp.add( new JButton( "Left Top" ), "left.top" );
msp.add( new JButton( "Left Middle" ), "left.middle" );
msp.add( new JButton( "Editor" ), "editor" );
msp.add( new JButton( "Bottom" ), "bottom" );
frame.setPreferredSize(new Dimension(600, 800));
frame.getContentPane().add(msp, BorderLayout.CENTER );
frame.pack();
frame.setVisible(true);
MultiSplitLayout.printModel(multiSplitLayout.getModel());
});
}
}