是否可以限制 GridBagLayout 中的单元格大小(高度/宽度)?
我的意思是.. 我有 2 行具有相同的 weightx = 0.5,但是当我调整大小时,我不希望第一行高于 300 像素。
如果它小于 300,我也不希望它不占用任何可用空间。(将 weightx 设置为 0)。在单元格中为我的组件设置最大大小是没有意义的,因为当我调整所有可用空间的大小时,所有可用空间都被组件填充(组件被调整大小以填充单元格)。
是否可以限制 GridBagLayout 中的单元格大小(高度/宽度)?
我的意思是.. 我有 2 行具有相同的 weightx = 0.5,但是当我调整大小时,我不希望第一行高于 300 像素。
如果它小于 300,我也不希望它不占用任何可用空间。(将 weightx 设置为 0)。在单元格中为我的组件设置最大大小是没有意义的,因为当我调整所有可用空间的大小时,所有可用空间都被组件填充(组件被调整大小以填充单元格)。
据我所知,GridBagLayout 无法做到这一点。幸运的是,还有其他选择。MiGLayout
工作原理类似,GridBagLayout
但更强大,更具表现力。它也是基于单元格的,可让您设置单元格的最小、首选和最大大小以及单元格的行/列
虽然我建议您制定自己的解决方案,因为这个解决方案过于依赖行约束,并且基于一些关于您想要什么的假设,但这里有一个示例:
JPanel panel = new JPanel(new MigLayout("flowy, fillx, filly", "[fill, grow]", "[fill, 0:100:300][fill, 0:100:max(100%,300)]"));
JPanel redPanel = new JPanel();
redPanel.setBackground(Color.RED);
JPanel bluePanel = new JPanel();
bluePanel.setBackground(Color.BLUE);
panel.add(redPanel);
panel.add(bluePanel);
JFrame frame = new JFrame();
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);