MigLayout:如何*垂直*对齐Dock中的多个组件?

时间:2015-05-20 13:31:37

标签: java swing miglayout

MigLayout支持向Dock添加多个组件。我想在西码头添加多个组件,从上到下。但是,似乎MigLayout只能在Dock中管理水平布局。我尝试了许多参数(例如,包裹,生长,流动)但没有成功。

那么,是否有可能在码头内包裹或设置垂直流量?或者这对于MigLayout本身是不可能的,但只能使用额外的侧面板组件?

这里是西码头内不需要的水平布局的一个例子:

example of unwanted horizontal layout inside west dock

如何将以下的红色,绿色,蓝色组件相互?这是代码:

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JTextField;

import net.miginfocom.swing.MigLayout;

public class MigTest extends JFrame {

    MigTest() {
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setSize(800, 600);

        setLayout(new MigLayout("fill"));

        JTextField dockW1 = new JTextField("West 1"); dockW1.setBackground(Color.red);
        JTextField dockW2 = new JTextField("West 2"); dockW2.setBackground(Color.green);
        JTextField dockW3 = new JTextField("West 3"); dockW3.setBackground(Color.blue);
        JTextField center = new JTextField("Center"); center.setBackground(Color.lightGray);

        add(center, "grow");

        // HOW TO LAYOUT THESE COMPONENTS VERTICALLY INSIDE WEST DOCK ?
        add(dockW1, "dock west, wrap, growy, flowy");
        add(dockW2, "dock west, wrap, growy, flowy");
        add(dockW3, "dock west, wrap, growy, flowy");

        setVisible(true);
    }

    public static void main(String[] args) {
        new MigTest();
    }
}

[edit] :请注意,我不想将dockW1dockW2dockW3center放入单个网格中因为我计划在中心区域应用复杂的布局,而不是侧面区域,这就是发明对接功能的原因:)

2 个答案:

答案 0 :(得分:0)

恕我直言,侧面板更容易选择,结果相同。

您也可以尝试使用Quick guide中第2页所写的单元格坐标。

答案 1 :(得分:0)

我的第一个建议是将MigLayout的构造函数更改为

new MigLayout("fill","[][grow]","[][][]")

然后将add语句更改为:

 add(center, "cell 1 0 1 3, grow");
 add(dockW1, "cell 0 0");
 add(dockW2, "cell 0 1");
 add(dockW3, "cell 0 2");

修改

在您修改问题后,我建议您创建一个新的JPanel对象说dockWest并添加组件dockW1dockW2dockW3dockWest并最终将dockWest停靠在当前JFrame的西边,如:

JPanel dockWest = new JPanel();
dockWest.setLayout(new MigLayout("fill", "[]", "[grow][grow][grow]");
dockWest.add(dockW1, "cell 0 0");
dockWest.add(dockW2, "cell 0 1");
dockWest.add(dockW3, "cell 0 2");

add(dockWest, "dock west, growy");