java - [Miglayout]调整容器的大小以适合所包含的所有组件的总大小,带有插图和间隙

标签 java swing layout-manager miglayout

如何使用 MigLayout 以便在 pack() 之后我可以看到一个具有适当大小的 JFrame 来容纳其所有子组件,包括边框、插图和间隙??现在我看到一些元素被切断,留下一半尺寸可见,但一半被切断。

最佳答案

我刚刚弄清楚如何根据所有包含的组件的大小总和来保证容器的正确大小,而不需要对任何内容进行硬编码。

  1. 创建一个 JPanel 面板 作为您的工作面板,而不是触摸 contentPane。只需将其添加回 contentPane 即可。 不要触摸contentPane,它是关键。

  2. 设置panel的布局,而无需硬编码行高、列宽等。这可能会破坏布局,因为您的硬编码高度可能会小于或大于需要的高度,留下一些行尺寸错误,并将最后一行/列保留一半。

  3. 将您的元素添加到面板中。添加它们时,您可以指定尺寸。

  4. panel添加回contentPane:getContentPane().add(panel);我们不需要设置contentPane 的布局。

  5. 最后,pack()setVisible(true)如你所愿。无需setSize()setBounds()等。插入和间隙将由MigLayout自动处理。Viola!

SSCCE:

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

import net.miginfocom.swing.MigLayout;

public class InsetsAndBorder extends JFrame {
    public InsetsAndBorder() {
        begin();
    }

    private void begin() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(new MigLayout("insets 2 2 2 2, fillx, debug", "3[]3[]3[]3", "5[]5[]5[]5"));

        JLabel label1 = new JLabel("1");
        JLabel label2 = new JLabel("2");

        JButton button = new JButton("No way!");

        panel.add(label1, "cell 1 2, grow");

        panel.add(label2, "cell 2 2, grow");

        panel.add(button, "cell 0 1, grow");

        getContentPane().add(panel);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                InsetsAndBorder frame = new InsetsAndBorder();

            }

        });
    }
}

关于java - [Miglayout]调整容器的大小以适合所包含的所有组件的总大小,带有插图和间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42279034/

相关文章:

java - 我在尝试连接 FTP 服务器时收到 "could not connect to host"Logcat 消息,我做错了什么?

帮助! paintComponent 问题

java - GridBagLayout 为什么第三列更大?

java - 如何使用 GridBagLayout 制作单列按钮?

java - 无法从给定来源创建信封

用于将两个(证书和证书 key )文件作为多部分表单数据发送的 HTTP post 请求的 Java 代码

java - Elasticsearch 最后使用 java 建立索引的日期

java - JButton + AbstractAction 重置一堆 JCheckBox - Swing

java - 将组装好的图像绘制到 JPanel

java - 如何将 FlowLayout 与绝对定位混合使用