我注意到在 boxlayout 中设置最大尺寸有些奇怪。
我需要在窗口右侧运行一列面板,并尝试使用框式布局对其进行设置。可能有 8-10 或 30-40,所以我给它们足够的空间来容纳 30-40,但如果只有 8-10,它们会分散开来占用所有可用空间,看起来很奇怪。所以我想我会为他们设置MaximumSize 以阻止这种情况发生......
...我一直以他们中的大多数人消失而告终。
所以我把它分解成一堆非常基本的彩色面板,试图看看发生了什么,我已经想出了如何继续,但我不喜欢它。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BoxLayoutDemo extends JFrame {
public BoxLayoutDemo() {
super("JScrollPane Demonstration");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
setVisible(true);
}
public void init() {
setLayout(null);
JPanel rightPanel = new JPanel();
rightPanel.setBounds(400,0,400,600);
rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS));
JPanel greenPanel = new JPanel();
JPanel bluePanel = new JPanel();
JPanel yellowPanel = new JPanel();
greenPanel.setBackground(Color.GREEN);
bluePanel.setBackground(Color.BLUE);
yellowPanel.setBackground(Color.YELLOW);
rightPanel.add(greenPanel);
rightPanel.add(bluePanel);
rightPanel.add(yellowPanel);
add(rightPanel);
}
public static void main(String args[]) {
new BoxLayoutDemo();
}
}
...这正是我所期望的:三个彩色框占据了屏幕的右半部分。
如果我添加如下内容:
greenPanel.setMaximumSize(new Dimension(400,100));
bluePanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
然后三个彩色框每个都只有 100px 高,只占屏幕的上半部分左右,这也是我所期望的。
但如果我这样做...
greenPanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
蓝色面板将其他两个面板压低到只有几个 px 高。
这可能不会成为问题,我可以为所有内容设置最大尺寸,但在这并不可行的假设情况下,有没有办法改变这种行为,或者这只是盒子布局做?
编辑:
好的,所以我们将 test1 称为:
greenPanel.setMinimumSize(new Dimension(400,100));
yellowPanel.setMinimumSize(new Dimension(400,100));
...这对任何东西都没有影响,因为绿色和黄色面板无论如何都高约 200 像素。
测试2:
greenPanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
...导致蓝色面板挤出最初描述的绿色和黄色面板。
测试3:
greenPanel.setMinimumSize(new Dimension(400,100));
greenPanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMinimumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
...应该会产生 100 px 高的绿色和黄色面板,正如您所描述的,除了在实践中实际发生的事情与 test2 中的完全相同。