java - MigLayout 在窗口调整大小后根据百分比更新单元格大小

标签 java jframe miglayout

我正在编写一个应用程序,我希望在其中具有此布局

            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");

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

如何修复此问题以便刷新布局并获取窗口的大小?

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

谢谢。

最佳答案

使用以下代码

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() 方法。

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

关于java - MigLayout 在窗口调整大小后根据百分比更新单元格大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39979020/

相关文章:

Java 程序输出(堆栈)

java - 即使使用 transient 也不会出现 NotSerializedException

java - 更新 JFrame 大小和扩展状态

java - 从内部类引用

java - 如何在添加新 JPanel 之前从 JFrame 中删除 JPanel

Java Spring MVC 集成测试创建 OAuth2 主体

java - 基于图 block 的 map 和碰撞;陷入困境

java - 使用 JPanels 设置布局

java - 如何在 JFrame 中显示不同的组件?

java - 折叠不可见的 Java Swing 组件的最佳方法