注:本文转自《白煮蛋的博客》
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>
最后,可以在各个组件之间创建间隙。