JavaSwing:如何更改网格布局中一行的大小,并允许它仅在水平方向而不是垂直方向上动态调整大小?
大家好,我有一个JFrame,里面有三个组件JavaSwing:如何更改网格布局中一行的大小,并允许它仅在水平方向而不是垂直方向上动态调整大小?,java,swing,layout,grid-layout,gridbaglayout,Java,Swing,Layout,Grid Layout,Gridbaglayout,大家好,我有一个JFrame,里面有三个组件 菜单 有标签的窗格 有一些按钮的面板 最初,我的目标是创建如下设计: 当用户调整应用程序的大小时,所有内容都会调整大小。所以我想,如果我使用一个简单的网格布局,我的问题可能会得到解决,所以我决定执行以下操作: 选项卡式窗格内部将有一些面板,这些面板将遵循网格布局 底部的面板将遵循网格布局 JFrame也将遵循网格布局 结果: 正如您所看到的,这不是我想要的,按钮太大,尽管应用程序的大小调整得非常好: 按钮也可以调整大小,但仍然太大。我希望能够为
提前感谢。我会使用
边框布局
作为内容窗格。使用BorderLayout.CENTER
将选项卡式窗格放入其中,使用BorderLayout.SOUTH
将按钮面板放入其中
JFrame也将遵循网格布局
这是你的问题。相反,使用默认的BorderLayout
(因此删除将JFrame布局设置为GridLayout的调用)并
BorderLayout.SOUTH
BorderLayout.CENTER
)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();
}
});
}
}
+我想这也行。然后为下部面板设置首选大小。这将使其高度恒定。不要为中心面板设置大小。这样,当您展开窗口时,其他所有对象都会保持一个大小,而只有中心会展开。此外,下面板应使用
FlowLayout
@davidXYZ,无需在下面板上设置首选尺寸。设置首选大小是个例外@davidXYZ在开始处理pref/max/min之前,您可能需要先阅读一下sizes@MadProgrammer我使用了我在这里提到的方法,它很有效。顺便说一下,我已经读过另一篇文章了。关于如何保持喷气式飞机的恒定高度,你还有什么其他建议吗?@davidXYZ这是个难题。使用pref/min/max heights的问题在于,您开始对字体高度进行假设,这在不同平台(甚至机器)之间是不匹配的。我知道“我只为Windows写作”这一论点,但这并没有改变这样一个事实,即这通常是一种不好的做法(而且我在我的Windows框上使用的字体与你我不一样)。你解决这个问题的方式将取决于你试图实现的目标。从这个问题来看,我倾向于使用合适的布局管理器。并非每个解决方案都适合所有问题