JFrame 也将遵循网格布局。
这是你的问题。相反,使用默认值BorderLayout
(因此删除将 JFrame 的布局设置为 GridLayout 的调用)和
- 添加带有约束的按钮面板
BorderLayout.SOUTH
- 添加没有任何约束的选项卡式窗格(这意味着约束
BorderLayout.CENTER
)
查看Swing LayoutManager 教程,特别是有关BorderLayout的示例。
小例子:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
public class TestLayout {
protected void initUI() {
final JFrame frame = new JFrame(TestLayout.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenuItem newItem = new JMenuItem("New...");
JMenuItem open = new JMenuItem("Open...");
fileMenu.add(newItem);
fileMenu.add(open);
menuBar.add(fileMenu);
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("Tab 1", new JPanel());
tabs.addTab("Tab 2", new JPanel());
tabs.addTab("Tab 3", new JPanel());
JPanel buttonPanel = new JPanel(new GridLayout());
buttonPanel.add(new JButton("Button-1"));
buttonPanel.add(new JButton("Button-2"));
buttonPanel.add(new JButton("Button-3"));
frame.add(tabs);
frame.add(buttonPanel, BorderLayout.SOUTH);
frame.setJMenuBar(menuBar);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestLayout().initUI();
}
});
}
}