Сохранение определения макета JXMultiSplitPane при закрытии окна - PullRequest
0 голосов
/ 03 апреля 2019

Я использую 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());
        });
    }
}
...