首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MIGLayout -添加JSeparator

MIGLayout -添加JSeparator
EN

Stack Overflow用户
提问于 2018-06-13 01:35:07
回答 1查看 228关注 0票数 0

我正在与MIGLayout作斗争-我通常知道它的基础知识,但今天遇到了一个问题。

要简化情况,请执行以下操作:

我希望有三行,这样在第一行和第三行中就有不固定数量的对象(e.x。JTextField组件)。第一行的第一个文本字段的宽度应该与第三行的第一个文本字段的宽度相同,以此类推。

行中的最后一个文本字段包含大多数文本字段,它应该随着框架大小的其余部分而增长。

这两行应该由JSeparator区分,它也应该是帧的长度。

我已经看过How to draw a separator across a panel using MigLayout了,但是因为我需要字段在另一个字段下精确对齐,所以它对我不起作用。

这是我的代码:

代码语言:javascript
运行
复制
public class Main extends JFrame {
    public static void main(String[] args) {
            JFrame.setDefaultLookAndFeelDecorated(true);
            new Main();
    }

    public Main() {
            setLayout(new MigLayout(new LC()));
            setPreferredSize(new Dimension(800, 300));
            CC cc = new CC().growX();
            CC wcc = new CC().growX().wrap();
            add(new JTextField("Area 1"), cc);
            add(new JTextField("Area 2"), cc);
            add(new JTextField("Area 3"), wcc);
            add(new JSeparator(), new CC().spanX().pushX().growX().wrap());
            add(new JTextField("Longer Area 1"), cc);
            add(new JTextField("Longer Area 2"), cc);

            setDefaultCloseOperation(EXIT_ON_CLOSE);
            pack();
            setVisible(true);
    }
}

它看起来是这样的:

这就是我想要的样子:

这个问题的最佳解决方案是什么?文本字段的数量将动态变化。提前谢谢。

EN

Stack Overflow用户

发布于 2018-08-03 21:50:42

使用一个名为fill的布局约束,并将所有内容设置为growx。然后将spanx添加到每行的最后一个组件。

您的示例看起来很奇怪的原因是您在fill上使用了pushx

下面的示例生成此输出。

可运行的示例

代码语言:javascript
运行
复制
import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;

import net.miginfocom.swing.MigLayout;

@SuppressWarnings("serial")
public class TextFieldsForEveryone extends JFrame {
    private JPanel panel;

    private TextFieldsForEveryone() {
        setPreferredSize(new Dimension(800, 300));
        setUp();
        add(panel);

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    private void setUp() {
        panel = new JPanel(new MigLayout("fillx"));
        panel.add(new JTextField("Area 1"), "growx");
        panel.add(new JTextField("Area 2"), "growx");
        panel.add(new JTextField("Area 3"), "growx, spanx, wrap");
        panel.add(new JSeparator(), "growx, spanx, wrap");
        panel.add(new JTextField("Longer Area 1"), "growx");
        panel.add(new JTextField("Longer Area 2"), "growx, spanx");
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> new TextFieldsForEveryone());
    }
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50822776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档