Miglayout网格约束自定义布局

noB*_*ner 2 java swing constraints miglayout layout-manager

我是新来的,所以对我很轻松.我已经研究了有关miglayout的所有文档(这是非常好的btw),但我似乎无法正确显示我想要的网格.

我需要MigLayout()参数来设置网格:

2行,即底行被分成两半(或者如果你将:1个顶行与2个底部列相邻).顶行将显示带有相关按钮的搜索文本字段.左下方列将显示3个按钮堆叠在一起.右下方的列将显示图像标签.

以下是一些代码:

//main window panel setup
            JPanel mainPanel = new JPanel();
            mainWindow.add(mainPanel);
            mainPanel.setLayout(new MigLayout(""));

            //components insertion into panel (using MigLayout constraints)
            mainPanel.add(searchText);
            mainPanel.add(searchBtn, "wrap");
            mainPanel.add(addBtn);
            mainPanel.add(logoImage, "spany 3 , wrap");
            mainPanel.add(randomBtn, "wrap");
            mainPanel.add(getFileBtn);
Run Code Online (Sandbox Code Playgroud)

(无法上传图片)

使用此代码,请注意,徽标保持在searchButton下方(我认为这是由于布局默认设置为网格),但我希望它适合于按钮的相邻右侧和textfield/searchButton下方.

dic*_*c19 7

首先,我会说你非常接近,你只需要使用列数和约束(加上一些缺少的组件约束).这可以在实例化布局时完成:

MigLayout layout = new MigLayout("debug, fillx", "[][grow][]");
Run Code Online (Sandbox Code Playgroud)

注意debug并且fillx是布局约束,分别用于启用调试功能和填充整个宽度.有关详细信息,请参阅此答案.

现在您可以认为您需要两列,但实际上需要三列才能展开中间列,而第一列和最后一列继续占用最小可能宽度.这就是[][grow][]约束的意思.

请考虑以下代码段:

MigLayout layout = new MigLayout("debug, fillx", "[][grow][]");
JPanel content = new JPanel(layout);
// First row        
content.add(new JTextField(20), "spanx 2, growx"); // search text field
content.add(new JButton("Search"), "wrap");
// Second row
content.add(new JButton("Button # 1"), "growx");
content.add(new JLabel("Image here"), "span 2 3, grow, wrap"); // image label
content.add(new JButton("Button # 2"), "growx, wrap");
content.add(new JButton("Button # 3"), "growx, wrap");
Run Code Online (Sandbox Code Playgroud)

这会产生这样的东西:

自定义布局示例

请注意,在水平调整大小时,搜索文本字段和图像标签都将占用最大可用宽度,而搜索按钮和按钮的堆栈将占用最小可能宽度.

  • 欢迎你:)如果这个答案对你好,那么pelase [接受它](http://stackoverflow.com/help/accepted-answer).@noBrainer (2认同)