java - MigLayout:推送不符合我的预期

标签 java layout push miglayout

我有一个非常简单的布局问题,使用 MigLayout .这是一个简短的 SSCCE

import java.awt.Color;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import net.miginfocom.swing.MigLayout;

public class LayoutDemo {
    public static void main(final String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel(new MigLayout("insets 0, hidemode 2, debug", "", ""));

        final JLabel[] labels = {new JLabel("Area 1"), new JLabel("Area 2"), new JLabel("Area 3")};
        for (final JLabel l : labels) {
            l.setHorizontalAlignment(JLabel.CENTER);
            l.setBackground(new Color(new Random().nextInt(Integer.MAX_VALUE)));
            l.setOpaque(true);
        }
        panel.add(labels[0], "w 200!");
        panel.add(labels[1], "spany 2, push, grow, wrap");
        panel.add(labels[2], "w 200!, grow, pushy");

        frame.setContentPane(panel);
        frame.setSize(600, 400);
        frame.setVisible(true);
    }
}

产生以下输出:

enter image description here

区域 1 的单元格使用与区域 3 相同的垂直空间。但我希望区域 3 尽可能地将区域 1 推开。我怎样才能做到这一点?唯一固定的长度是左边两个标签的宽度。

最佳答案

我将解释为什么您的代码没有执行您的操作 已经预料到并对其进行了简单的更正。

标签区域 1 和区域 2 共享同一行。 推送 标签区域 2 的约束扩展了当前行 和专栏。由于这两个标签共享同一行, 它也会影响标签区域 1。更改 push 标签区域 2 对 pushx 的约束修复了它。 标签Area 3被自己垂直插入 pushy 约束,因此,标记区域 1 和 区域 2 具有相同的高度。

以下代码示例创建了预期的布局:

package com.zetcode;

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



public class MigLayoutPushEx extends JFrame {

    public MigLayoutPushEx() {

        initUI();

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

    private void initUI() {

        setLayout(new MigLayout("insets 5"));

        final JLabel[] labels = {new JLabel("Area 1"), 
            new JLabel("Area 2"), new JLabel("Area 3")};

        for (final JLabel l : labels) {
            l.setHorizontalAlignment(JLabel.CENTER);
            l.setBorder(BorderFactory.createEtchedBorder());
        }

        add(labels[0], "w 200");
        add(labels[1], "w 200, h 200, spany 2, pushx, grow, wrap");
        add(labels[2], "w 200, grow, pushy");

        pack();
    }    


    public static void main(String[] args) {

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

Areas

关于java - MigLayout:推送不符合我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21017053/

相关文章:

react-native - React Native FlatList - 如何在下方为按钮留出空间?

WPF 不支持 Textbox.MinLines 进行自动高度计算

algorithm - 布局许多不规则的盒子,使它们适合屏幕

Git 推送具有相同文件的新分支,再次上传所有文件

java - Method Reflect - 方法的调用顺序

java - 如何在 Android 中使用 JarJar 来更改外部 jar 的包名?

java - 在 JBOSS 应用程序服务器级别定义变量

java - 为什么使用netty循环writeAndFlush发送DatagramPacket必须让线程 hibernate 一段时间?

git - 删除 SourceTree 中的等待推送

ios - 从网络应用程序在 iOS 上推送通知