Java 如何在布局中扩大差距

Java 如何在布局中扩大差距,java,swing,layout,layout-manager,miglayout,Java,Swing,Layout,Layout Manager,Miglayout,我想创建一个带有底部状态行的项目垂直列表,这样当它被调整大小时,项目和底部行之间的空间就会增大。使用它一定很简单,但不知何故它不是 下面的代码正是我想要的,但我必须使用一个组件来完成间距: final JFrame frame = new JFrame(); final JPanel panel = new JPanel(new MigLayout("wrap, debug", "[grow, fill]", "")); for (int i=0; i<5; ++i) { fina

我想创建一个带有底部状态行的项目垂直列表,这样当它被调整大小时,项目和底部行之间的空间就会增大。使用它一定很简单,但不知何故它不是

下面的代码正是我想要的,但我必须使用一个组件来完成间距:

final JFrame frame = new JFrame();
final JPanel panel = new JPanel(new MigLayout("wrap, debug", "[grow, fill]", ""));
for (int i=0; i<5; ++i) {
    final JEditorPane line = new JEditorPane();
    line.setText("a" + i);
    panel.add(line);
}
panel.add(new JLabel(), "push"); // This should be a gap!
final JLabel status = new JLabel("status line");
panel.add(status, "");
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
final JFrame=new JFrame();
最终的JPanel面板=新的JPanel(新的MigLayout(“包装,调试”,“增长,填充],”);

对于(int i=0;i如果在组件上添加推送,则其符号与以下符号不同:

使组件所在的行和/或列以“权重”增长。这可以用来代替列/行约束中的“增长”关键字


因此,您必须添加push关键字作为行约束。

miglaway
确实是一个非常强大的管理器。这是可以实现的 我提供了三种解决方案

解决方案1

我们在第5行和第6行之间留出了一个贪婪的间隙

package com.zetcode;

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


public class MigLayoutGapGrow extends JFrame {

    public MigLayoutGapGrow() {

        initUI();

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


    private void initUI() {


        setLayout(new MigLayout("wrap", "[grow, fill]", "[][][][][]20:push[]"));

        add(new JTextField("a"+1));
        add(new JTextField("a"+2));
        add(new JTextField("a"+3));
        add(new JTextField("a"+4));
        add(new JTextField("a"+5));

        final JLabel status = new JLabel("status line");
        add(status);


        pack();
    }


    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                MigLayoutGapGrow ex = new MigLayoutGapGrow();
                ex.setVisible(true);
            }
        });
    }
}
解决方案2

我们放大放置标签的最后一个单元格,然后 与底部对齐

package com.zetcode;

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


public class MigLayoutGapGrow2 extends JFrame {

    public MigLayoutGapGrow2() {

        initUI();

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


    private void initUI() {

        setLayout(new MigLayout("wrap, debug", "[grow, fill]"));

        add(new JTextField("a"+1));
        add(new JTextField("a"+2));
        add(new JTextField("a"+3));
        add(new JTextField("a"+4));
        add(new JTextField("a"+5));

        final JLabel status = new JLabel("status line");
        add(status, "pushy, bottom");

        pack();
    }


    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                MigLayoutGapGrow2 ex = new MigLayoutGapGrow2();
                ex.setVisible(true);
            }
        });
    }
}
解决方案3

使用相对定位将标签贴在底部。相对 定位似乎不适用于
pack()
方法,这可能会导致 这可能是个问题

package com.zetcode;

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


public class MigLayoutGapGrow3 extends JFrame {

    public MigLayoutGapGrow3() {

        initUI();

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


    private void initUI() {

        setLayout(new MigLayout("wrap", "[grow, fill]"));

        add(new JTextField("a"+1), "id a1");
        add(new JTextField("a"+2));
        add(new JTextField("a"+3));
        add(new JTextField("a"+4));
        add(new JTextField("a"+5));

        final JLabel status = new JLabel("status line");
        add(status, "pos a1.x visual.y2-p");

        pack();
    }


    public static void main(String[] args) {

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