ksm*_*001 5 java layout swing grid-layout gridbaglayout
大家好,我有一个内部有三个组件的JFrame.
最初我的目标是创建如下设计:

当用户调整应用程序的大小时,一切都会调整大小.所以我想也许如果我使用简单的网格布局我的问题就会解决,所以我决定做以下事情:
选项卡式窗格中将包含一些面板,这些面板将遵循网格布局.
底部的面板将遵循网格布局.
JFrame也将遵循网格布局.
结果:

你可以看到这不是我想要的,按钮太大了,尽管应用程序调整得很好:

按钮也会调整大小,但它们仍然太大.我希望能够为按钮设置一个小尺寸(更具体地说是它们所包含的面板),当用户调整应用程序大小时,按钮只会水平调整而不是垂直调整,这意味着只有选项卡式窗格会变得更大垂直.这可以实现吗?我搜索并发现了关于gridbaglayout,我开始玩了一点,但我没有做到任何事情.我设法做的就是以下内容:

看起来不错,但是当我调整大小时,这就是我得到的:

提前致谢.
JFrame也将遵循网格布局.
这是你的问题.相反,使用默认值BorderLayout(因此删除将JFrame的布局设置为GridLayout的调用)和
BorderLayout.SOUTHBorderLayout.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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)