注:本文转自《白煮蛋的博客》
首先,您应该认真考虑其他布局管理器,例如 BorderLayoutManager (new JPanel(new BorderLayout())) 是一个好的开始。
此外,在设计对话框时,请记住您可以并且应该嵌套布局:一个 JPanel 位于另一个 JPanel 中(例如,GridLayout 位于 BorderLayout 中)。请注意:一个“好的”对话框应该适当调整大小,这样如果用户调整您的框架大小,您希望自动扩展您的信息对象,例如您的表格,而不是显示大面积的 JPanel 背景。这是使用 NullLayout 无法实现的。
但可能有一些情况——在这个大世界的某个地方——NullLayout 就是这样。所以这里有一个例子:
<span style="background-color:var(--highlight-bg)"><span style="color:var(--highlight-color)"><code class="language-java"><span style="color:var(--highlight-keyword)">import</span> java.awt.Dimension;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.JFrame;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.JPanel;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.JScrollPane;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.JTable;
<span style="color:var(--highlight-keyword)">import</span> javax.swing.table.DefaultTableModel;
<span style="color:var(--highlight-keyword)">public</span> <span style="color:var(--highlight-keyword)">class</span> <span style="color:var(--highlight-literal)">JTableInNullLayout</span>
{
<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[] argv) <span style="color:var(--highlight-keyword)">throws</span> Exception {
<span style="color:var(--highlight-namespace)">DefaultTableModel</span> <span style="color:var(--highlight-variable)">model</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">DefaultTableModel</span>(
<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">String</span>[][] { { <span style="color:var(--highlight-variable)">"a"</span>, <span style="color:var(--highlight-variable)">"123"</span>} , {<span style="color:var(--highlight-variable)">"b"</span>, <span style="color:var(--highlight-variable)">"456"</span>} },
<span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">String</span>[] { <span style="color:var(--highlight-variable)">"name"</span>, <span style="color:var(--highlight-variable)">"value"</span> } );
<span style="color:var(--highlight-namespace)">JTable</span> <span style="color:var(--highlight-variable)">t</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JTable</span>(model);
<span style="color:var(--highlight-namespace)">JPanel</span> <span style="color:var(--highlight-variable)">panel</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JPanel</span>(<span style="color:var(--highlight-literal)">null</span>);
<span style="color:var(--highlight-namespace)">JScrollPane</span> <span style="color:var(--highlight-variable)">scroll</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JScrollPane</span>(t);
scroll.setBounds( <span style="color:var(--highlight-namespace)">0</span>, <span style="color:var(--highlight-namespace)">20</span>, <span style="color:var(--highlight-namespace)">150</span>, <span style="color:var(--highlight-namespace)">100</span> ); <span style="color:var(--highlight-comment)">// x, y, width, height</span>
panel.add(scroll);
<span style="color:var(--highlight-namespace)">JFrame</span> <span style="color:var(--highlight-variable)">frame</span> = <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">JFrame</span>();
frame.add(panel);
frame.setPreferredSize( <span style="color:var(--highlight-keyword)">new</span> <span style="color:var(--highlight-literal)">Dimension</span>(<span style="color:var(--highlight-namespace)">200</span>,<span style="color:var(--highlight-namespace)">200</span>));
frame.pack();
frame.setVisible(<span style="color:var(--highlight-literal)">true</span>);
}
}</code></span></span>