MigLayout特定布局

时间:2014-03-03 15:06:43

标签: java miglayout

我一直在尝试使用MigLayout制作一个布局,其中包含3个面板,一个在右侧,一个在顶部,另一个用于填充其余空间。

像这样:

enter image description here

1 个答案:

答案 0 :(得分:1)

有几种解决方案可行。我举两个例子。 在这两个例子中,我们还设置了首选的宽度和高度 面板。通常情况下,小组会从中获得他们的首选 他们的孩子。

第一个布局是使用dock约束完成的。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;


public class MigLayoutThreePanels extends JFrame {

    public MigLayoutThreePanels() {

        initUI();

        setTitle("Three panels");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private void initUI() {

        setLayout(new MigLayout());

        JPanel pnl1 = new JPanel();
        pnl1.setBorder(BorderFactory.createEtchedBorder());
        JPanel pnl2 = new JPanel();
        pnl2.setBorder(BorderFactory.createEtchedBorder());
        JPanel pnl3 = new JPanel();
        pnl3.setBorder(BorderFactory.createEtchedBorder());


        add(pnl2, "w 40, dock east");
        add(pnl1, "h 40, dock north");
        add(pnl3, "w 250, h 200, dock center");

        pack();
    }


    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                MigLayoutThreePanels ex = new MigLayoutThreePanels();
                ex.setVisible(true);
            }
        });
    }
}

三个面板停靠在东,北和中心。之间的额外空间 可以使用间隙约束创建面板。

First solution

在第二个例子中,我们使用网格结构。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;


public class MigLayoutThreePanels2 extends JFrame {

    public MigLayoutThreePanels2() {

        initUI();

        setTitle("Three panels");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private void initUI() {

        setLayout(new MigLayout("gap 3 3"));

        JPanel pnl1 = new JPanel();
        pnl1.setBorder(BorderFactory.createEtchedBorder());
        JPanel pnl2 = new JPanel();
        pnl2.setBorder(BorderFactory.createEtchedBorder());
        JPanel pnl3 = new JPanel();
        pnl3.setBorder(BorderFactory.createEtchedBorder());

        add(pnl1, "h 40, growx");
        add(pnl2, "w 40, spany 2, growy, wrap");
        add(pnl3, "w 250, h 200, grow, push");

        pack();
    }


    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                MigLayoutThreePanels2 ex = new MigLayoutThreePanels2();
                ex.setVisible(true);
            }
        });
    }
}

在这个例子中,我们还在单元格和容器插入之间设置了一些间隙。

Second example