好的,关于下面的测试代码的几个问题......我没有完整的工作程序要发布,但我希望人们对 Swing 有足够的了解,可以尝试一下。这是 JPanel(BoxLayout) 内的 JLabel,我正在调整右下角标签的大小。
如图所示,我得到的是一个 300 宽 x 30 高的状态框。我已经摆弄了首选尺寸和标签最小尺寸,它似乎并没有以任何合理的方式表现。
- 为什么 JPanel 首选大小会影响高度而不影响宽度?如果我将 setPreferredSize() 中的 x 维度更改为 0 或 500,它仍然会从标签中显示 300。
- 为什么 JLabel 最小尺寸会影响宽度而不影响高度?如果我注释 setPreferredSize() 调用并将标签高度增加到 30,则没有任何反应。
- 我开始使用 JPanel setMinimumSize(已注释),但它不再有任何效果 - 为什么 JPanel 需要 setPreferredSize()?
- 如果我将标签文本从“”更改为“”,这会增加标签的高度。既然标签在这里没有控制高度,为什么这有任何影响呢?
顺便说一句,createRigidArea() 调用是强制分隔符向右,而不是粘在屏幕的左侧。如果对此有任何不那么笨拙的想法,我将不胜感激。
private JComponent makeStatusBarTest() {
JPanel statusPanel = new JPanel();
statusPanel.setLayout(new BoxLayout(statusPanel, BoxLayout.LINE_AXIS));
statusPanel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
// statusPanel.setMinimumSize(new Dimension(0, 30));
statusPanel.setPreferredSize(new Dimension(500, 30));
JLabel statusLabel = new JLabel();
Border emptyBorder = BorderFactory.createEmptyBorder(5, 10, 5, 10);
statusLabel.setBorder(emptyBorder);
statusLabel.setText("");
statusLabel.setMinimumSize(new Dimension(300, 20));
statusPanel.add(statusLabel);
statusPanel.add(new JSeparator(SwingConstants.VERTICAL));
statusPanel.add(Box.createRigidArea(new Dimension(5000,0)));
return statusPanel;
}