大家好,我有一个JFrame,里面有三个组件。
最初,我的目标是创建如下所示的设计:

当用户调整应用程序的大小时,所有的东西都会被调整大小。因此,我想,如果我使用一个简单的网格布局,我的问题就会得到解决,所以我决定做以下工作:
结果:

正如您所看到的,这不是我想要的,这些按钮太大了,尽管应用程序的大小很好:

这些按钮也会调整大小,但它们仍然太大。我希望能够为按钮设置一个较小的大小(更具体地说,它们包含在其中的面板),当用户调整应用程序的大小时,按钮将只调整水平大小,而不是垂直调整大小,这意味着只有选项卡式窗格才会垂直地变大。这能实现吗?我搜索并发现了关于网格布局,我开始玩一点点,但我没有取得任何成果。我所做的就是:

看起来不错,但当我调整尺寸时,我得到的是:

提前谢谢。
发布于 2012-09-26 14:58:18
我将使用BorderLayout作为内容窗格。使用BorderLayout.CENTER将选项卡式窗格放入其中,并使用BorderLayout.SOUTH在其中放置按钮面板。
发布于 2012-09-26 14:58:37
JFrame也将遵循网格布局。
这是你的问题。相反,使用默认的BorderLayout (因此删除将JFrame布局设置为GridLayout的调用)和
BorderLayout.SOUTH的按钮面板BorderLayout.CENTER)看看Swing LayoutManager tutorial,特别是与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();
}
});
}
}https://stackoverflow.com/questions/12604593
复制相似问题