【问题标题】:MigLayout update size of cells based on percentage after window resizeMigLayout 根据窗口调整大小后的百分比更新单元格的大小
【发布时间】:2017-02-20 02:23:30
【问题描述】:

我正在编写一个我希望有这种布局的应用程序

            45%                35%           10%   
    -----------------------------------------------
    |                   |                |         |
    |                   |                |         |
60% |                   |                |         |
    |                   |                |         |
    -------------------------------------|         |
    |                                    |         |
40% |                                    |         |
    |                                    |         |
    ------------------------------------------------

我是这样使用 MigLayout 管理器构建布局的

MigLayout ml = new MigLayout("debug",
            "10[45%!,fill]5[35%!,fill]10[20%!,fill]",
            "10[60%!,fill]5[40%!,fill]");

setLayout(ml);
add(panel1, "cell 0 0 1 1, grow");
add(panel1, "cell 1 0 1 1, grow");
add(panel3, "cell 2 0 1 2, grow");
add(panel4, "cell 0 1 2 1, grow");

问题是,如果我调整窗口大小,布局不会遵循新大小。它只是保持相同的大小。

如何解决此问题,以便刷新布局并获取窗口大小?

请注意,我希望每个面板也填充其单元格。

谢谢。

【问题讨论】:

    标签: java jframe miglayout


    【解决方案1】:

    使用以下代码

    import java.awt.*;
    import javax.swing.*;
    import net.miginfocom.swing.MigLayout;
    
    public class MigLay extends JFrame {
    
        private MigLay() {
            super("Button Layout");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLayout(new MigLayout("debug",
                "10[45%!,fill]5[35%!,fill]10[20%!,fill]",
                "10[60%!,fill]5[40%!,fill]"));
            createPanels();
            pack();
            setVisible(true);
        }
    
        private void createPanels() {
            JPanel panel1 = new JPanel(), panel2 = new JPanel(), panel3 = new JPanel(), panel4 = new JPanel();
            JLabel label = new JLabel("Panel 1");
            panel1.add(label);
    
            label = new JLabel("Panel 2");
            panel2.add(label);
    
            label = new JLabel("Panel 3");
            panel3.add(label);
    
            label = new JLabel("Panel 4");
            panel4.add(label);
    
            add(panel1, "cell 0 0 1 1, grow");
            add(panel2, "cell 1 0 1 1, grow");
            add(panel3, "cell 2 0 1 2, grow");
            add(panel4, "cell 0 1 2 1, grow");
        }
    
        public static void main(String[] args) {
            new MigLay();
        }
    }
    

    所做的更改:1)您调用了面板 1 两次,因此我创建了面板 2。
    2) 我在 setLayout() 方法中创建了您的布局.

    如果这些更改都不能解决您的问题,则问题不在于您在上面发布的代码,而在于您的代码中的某处。

    【讨论】:

    • 我试过了,它可以工作,但我发现我使用的是非常旧的 MigLayout 实现。更新布局库为我修复了它。
    猜你喜欢
    • 2011-03-07
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多