Хорошо, несколько вопросов о тестовом коде ниже ... У меня нет полной рабочей программы для публикации, но я надеюсь, что люди достаточно хорошо знают Swing, чтобы попробовать его.Это JLabel внутри JPanel (BoxLayout), и я работаю над изменением размера метки в правом нижнем углу.
То, что я получаю с кодом, как показано, это поле состояния шириной 300 на 30рост.Я возился с предпочтительным размером и минимальным размером этикетки, и, похоже, он не ведет себя рационально.
- Почему предпочтительный размер JPanel влияет на высоту, а не на ширину?Если я изменю размер x в setPreferredSize () на 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;
}