在 Swing GUI 中提供空白

注:本文转自《白煮蛋的博客》 

MigLayout有多种创造空间的方式。(此布局中的空间称为间隙。)间隙可以在具有布局约束的最高级别创建,可以在行和列之间创建间隙,也可以在具有组件约束的各个组件之间设置间隙。在称为 insets 的容器的边界周围也有特定的间隙,它们有自己的特定关键字要设置。

以下示例创建了所有这些类型的间隙:

<span style="background-color:var(--highlight-bg)"><span style="color:var(--highlight-color)"><code class="language-java"><span style="color:var(--highlight-keyword)">package</span> com.zetcode;

<span style="color:var(--highlight-keyword)">import</span> java.awt.EventQueue;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.BorderFactory;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.JButton;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.JFrame;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.JLabel;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.JPanel;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.JTextField;
<span style="color:var(--highlight-keyword)">import</span> net.miginfocom.swing.MigLayout;


<span style="color:var(--highlight-keyword)">public</span> <span style="color:var(--highlight-keyword)">class</span> <span style="color:var(--highlight-literal)">MigLayoutGaps2</span> <span style="color:var(--highlight-keyword)">extends</span> <span style="color:var(--highlight-literal)">JFrame</span> {

    <span style="color:var(--highlight-keyword)">public</span> <span style="color:var(--highlight-literal)">MigLayoutGaps2</span>() {

        initUI();

        setTitle(<span style="color:var(--highlight-variable)">"Gaps"</span>);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(<span style="color:var(--highlight-literal)">null</span>);
    }

    <span style="color:var(--highlight-keyword)">private</span> <span style="color:var(--highlight-keyword)">void</span> <span style="color:var(--highlight-literal)">initUI</span>() {

        <span style="color:var(--highlight-namespace)">JPanel</span> <span style="color:var(--highlight-variable)">base</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JPanel</span>(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayout</span>(<span style="color:var(--highlight-variable)">"flowy, ins 30, gap 15"</span>));
        setContentPane(base);

        <span style="color:var(--highlight-namespace)">JPanel</span> <span style="color:var(--highlight-variable)">pnl1</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JPanel</span>();
        pnl1.setBorder(
                BorderFactory.createTitledBorder(<span style="color:var(--highlight-variable)">"Grid gaps"</span>)
        );

        pnl1.setLayout(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayout</span>(<span style="color:var(--highlight-variable)">"gap 5 5, ins 10, wrap 3"</span>));

        pnl1.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JButton</span>(<span style="color:var(--highlight-variable)">"1"</span>));
        pnl1.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JButton</span>(<span style="color:var(--highlight-variable)">"2"</span>));
        pnl1.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JButton</span>(<span style="color:var(--highlight-variable)">"3"</span>));
        pnl1.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JButton</span>(<span style="color:var(--highlight-variable)">"4"</span>));
        pnl1.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JButton</span>(<span style="color:var(--highlight-variable)">"5"</span>));
        pnl1.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JButton</span>(<span style="color:var(--highlight-variable)">"6"</span>));

        <span style="color:var(--highlight-namespace)">JPanel</span> <span style="color:var(--highlight-variable)">pnl2</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JPanel</span>();
        pnl2.setBorder(
                BorderFactory.createTitledBorder(<span style="color:var(--highlight-variable)">"Column gaps"</span>)
        );

        pnl2.setLayout(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayout</span>(<span style="color:var(--highlight-variable)">"wrap 3"</span>, <span style="color:var(--highlight-variable)">"[]10[]"</span>));

        <span style="color:var(--highlight-namespace)">JLabel</span> <span style="color:var(--highlight-variable)">lbl1</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JLabel</span>();
        lbl1.setBorder(
            BorderFactory.createEtchedBorder()
        );

        <span style="color:var(--highlight-namespace)">JLabel</span> <span style="color:var(--highlight-variable)">lbl2</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JLabel</span>();
        lbl2.setBorder(
            BorderFactory.createEtchedBorder()
        );

        <span style="color:var(--highlight-namespace)">JLabel</span> <span style="color:var(--highlight-variable)">lbl3</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JLabel</span>();
        lbl3.setBorder(
            BorderFactory.createEtchedBorder()
        );        

        pnl2.add(lbl1, <span style="color:var(--highlight-variable)">"w 40, h 110"</span>);
        pnl2.add(lbl2, <span style="color:var(--highlight-variable)">"w 40, h 110"</span>);
        pnl2.add(lbl3, <span style="color:var(--highlight-variable)">"w 40, h 110"</span>);

        <span style="color:var(--highlight-namespace)">JPanel</span> <span style="color:var(--highlight-variable)">pnl3</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JPanel</span>();
        pnl3.setBorder(
                BorderFactory.createTitledBorder(<span style="color:var(--highlight-variable)">"Row gaps"</span>)
        );

        pnl3.setLayout(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayout</span>(<span style="color:var(--highlight-variable)">"wrap"</span>, <span style="color:var(--highlight-variable)">""</span>, <span style="color:var(--highlight-variable)">"[]15[]"</span>));

        <span style="color:var(--highlight-namespace)">JLabel</span> <span style="color:var(--highlight-variable)">lbl4</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JLabel</span>();
        lbl4.setBorder(
            BorderFactory.createEtchedBorder()
        );

        <span style="color:var(--highlight-namespace)">JLabel</span> <span style="color:var(--highlight-variable)">lbl5</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JLabel</span>();
        lbl5.setBorder(
            BorderFactory.createEtchedBorder()
        );

        <span style="color:var(--highlight-namespace)">JLabel</span> <span style="color:var(--highlight-variable)">lbl6</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JLabel</span>();
        lbl6.setBorder(
            BorderFactory.createEtchedBorder()
        );        

        pnl3.add(lbl4, <span style="color:var(--highlight-variable)">"w 150, h 20"</span>);
        pnl3.add(lbl5, <span style="color:var(--highlight-variable)">"w 150, h 20"</span>);
        pnl3.add(lbl6, <span style="color:var(--highlight-variable)">"w 150, h 20"</span>);        

        <span style="color:var(--highlight-namespace)">JPanel</span> <span style="color:var(--highlight-variable)">pnl4</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JPanel</span>();
        pnl4.setBorder(
                BorderFactory.createTitledBorder(<span style="color:var(--highlight-variable)">"Component gaps"</span>)
        );

        pnl4.setLayout(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayout</span>());

        pnl4.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JLabel</span>(<span style="color:var(--highlight-variable)">"Name:"</span>), <span style="color:var(--highlight-variable)">"gapright 5"</span>);
        pnl4.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JTextField</span>(<span style="color:var(--highlight-namespace)">10</span>), <span style="color:var(--highlight-variable)">"gapbottom 20, gaptop 20"</span>);

        base.add(pnl1);
        base.add(pnl2);
        base.add(pnl3);
        base.add(pnl4);

        pack();
    }

    <span style="color:var(--highlight-keyword)">public</span> <span style="color:var(--highlight-keyword)">static</span> <span style="color:var(--highlight-keyword)">void</span> <span style="color:var(--highlight-literal)">main</span>(String[] args) {

        EventQueue.invokeLater(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">Runnable</span>() {
            <span style="color:var(--highlight-keyword)">@Override</span>
            <span style="color:var(--highlight-keyword)">public</span> <span style="color:var(--highlight-keyword)">void</span> <span style="color:var(--highlight-literal)">run</span>() {
                <span style="color:var(--highlight-namespace)">MigLayoutGaps2</span> <span style="color:var(--highlight-variable)">ex</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayoutGaps2</span>();
                ex.setVisible(<span style="color:var(--highlight-literal)">true</span>);
            }
        });
    }
}
</code></span></span>

我们在布局中有四个面板。每个面板都有一个MigLayout经理。

<span style="background-color:var(--highlight-bg)"><span style="color:var(--highlight-color)"><code class="language-java"><span style="color:var(--highlight-namespace)">JPanel</span> <span style="color:var(--highlight-variable)">base</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JPanel</span>(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayout</span>(<span style="color:var(--highlight-variable)">"flowy, ins 30, gap 15"</span>));
</code></span></span>

这条线在面板之间创建容器插图和垂直间隙。

<span style="background-color:var(--highlight-bg)"><span style="color:var(--highlight-color)"><code class="language-java">pnl1.setLayout(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayout</span>(<span style="color:var(--highlight-variable)">"gap 5 5, ins 10, wrap 3"</span>));
</code></span></span>

在这里,我们为整个网格结构应用间隙,并设置容器间隙。

<span style="background-color:var(--highlight-bg)"><span style="color:var(--highlight-color)"><code class="language-java">pnl2.setLayout(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayout</span>(<span style="color:var(--highlight-variable)">"wrap 3"</span>, <span style="color:var(--highlight-variable)">"[]10[]"</span>));
</code></span></span>

这条线在列之间产生间隙。

<span style="background-color:var(--highlight-bg)"><span style="color:var(--highlight-color)"><code class="language-java">pnl3.setLayout(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">MigLayout</span>(<span style="color:var(--highlight-variable)">"wrap"</span>, <span style="color:var(--highlight-variable)">""</span>, <span style="color:var(--highlight-variable)">"[]15[]"</span>));
</code></span></span>

使用此代码定义行间距。

<span style="background-color:var(--highlight-bg)"><span style="color:var(--highlight-color)"><code class="language-java">pnl4.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JLabel</span>(<span style="color:var(--highlight-variable)">"Name:"</span>), <span style="color:var(--highlight-variable)">"gapright 5"</span>);
pnl4.add(<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JTextField</span>(<span style="color:var(--highlight-namespace)">10</span>), <span style="color:var(--highlight-variable)">"gapbottom 20, gaptop 20"</span>);
</code></span></span>

最后,可以在各个组件之间创建间隙。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值