调整组件大小以适合行

时间:2015-06-23 21:29:33

标签: java swing layout-manager miglayout

我在我的代码中使用MigLayout

import javax.swing.*;
import java.awt.*;
import net.miginfocom.swing.MigLayout;

public class MCVE
{
    JFrame myMainWindow = new JFrame("MCVE");

    JPanel mcvePanel = new JPanel();

    JTextField tf1 = new JTextField();
    JTextField tf2 = new JTextField();
    JTextField tf3 = new JTextField();
    JTextField tf4 = new JTextField();
    JTextField tf5 = new JTextField();

    public void runGUI()
    {
        myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        myMainWindow.setLayout(new GridLayout(1,1));

        createMCVEPanel();

        myMainWindow.getContentPane().add(mcvePanel);

        myMainWindow.setVisible(true);
        myMainWindow.pack();
    }

    public void createMCVEPanel()
    {
        MigLayout layout = new MigLayout("" , "[grow]");
        mcvePanel.setLayout(layout);

        mcvePanel.add(tf1,"growx, width 100:100:");
        mcvePanel.add(tf2,"growx, width 100:100:");
        mcvePanel.add(tf3,"growx, width 100:100:,wrap");
        mcvePanel.add(tf4,"growx, width 100:100:");
        mcvePanel.add(tf5,"growx, width 100:100:");
    }

    public static void main(String[] args)
    {
        MCVE mcve = new MCVE();
        mcve.runGUI();
    }
}

创建布局

3x2

是否有办法自动调整组件大小,以便生成类似这样的布局

3xSpread2

不使用像

这样的代码
mcvePanel.add(tf1,"growx, width 100:100:, span 2");
mcvePanel.add(tf2,"growx, width 100:100:, span 2");
mcvePanel.add(tf3,"growx, width 100:100:, span 2, wrap");
mcvePanel.add(tf4,"growx, width 100:100:, span 3");
mcvePanel.add(tf5,"growx, width 100:100:, span 3");

我希望能够这样做,因为它对于5个JTextFields来说并不是太复杂,但对于大量的JTextFields来说它不是最有效的方法,例如128个JTextFields(不是我会使用的)这很多JTextFields。)

1 个答案:

答案 0 :(得分:3)

而不是使用span使用split:

mcvePanel.add(tf1,"growx, width 100:100:, split 3");
mcvePanel.add(tf2,"growx, width 100:100:");
mcvePanel.add(tf3,"growx, width 100:100:,wrap");
mcvePanel.add(tf4,"growx, width 100:100:, split 2");
mcvePanel.add(tf5,"growx, width 100:100:");

另外,为了避免必须明确换行,你可以将它设置为布局约束,而是这样做:

MigLayout layout = new MigLayout("wrap 1", "[grow]");
mcvePanel.setLayout(layout);

mcvePanel.add(tf1, "growx, width 100:100:, split 3");
mcvePanel.add(tf2, "growx, width 100:100:");
mcvePanel.add(tf3, "growx, width 100:100:");
mcvePanel.add(tf4, "growx, width 100:100:, split 2");
mcvePanel.add(tf5, "growx, width 100:100:");