JSeparator не в нужном месте в моей JPanel - PullRequest
1 голос
/ 24 июня 2011

Итак, мой код выглядит следующим образом:

JPanel mainPanel = new JPanel();

mainPanel.setBorder(new EmptyBorder(50,50,0,10));

BoxLayout layout = new BoxLayout(mainPanel, BoxLayout.Y_AXIS);
mainPanel.setLayout(layout);

JSeparator separate = new JSeparator(SwingConstants.HORIZONTAL);
mainPanel.add(separate);

mainPanel.add(new JButton());
mainPanel.add(new JButton());

Проблема, с которой я постоянно сталкиваюсь, заключается в том, что вместо моей панели выглядит:

______________
|             |
|  ------     |
|  Button     |
|  Button     |
|             |
|             |
|             |
______________

он почему-то помещает тонну пространства между кнопками и разделителем так, чтобы он выглядел следующим образом:

______________
|             |
|  ------     |
|             |
|             |
|             |
|  Button     |
|  Button     |
______________

Для жизни я не могу заставить кнопки быть рядом с JSeparator, есть идеи?

Ответы [ 2 ]

4 голосов
/ 24 июня 2011

BoxLayout учитывает максимальный размер компонента.Когда будет доступно больше места, компонент будет расти, чтобы занять дополнительное пространство.Вы должны предотвратить рост сепаратора:

JSeparator separate = new JSeparator(SwingConstants.HORIZONTAL);
System.out.println(separate.getPreferredSize());
System.out.println(separate.getMaximumSize());
Dimension d = separate.getPreferredSize();
d.width = separate.getMaximumSize().width;
separate.setMaximumSize( d );
0 голосов
/ 24 июня 2011

Если Y-выравнивания (из .getAlignmentY ()) не совпадают, BoxLayout имеет тенденцию делать забавные вещи.Попробуйте вручную установить выравнивание к вершине.(То же самое происходит с выравниванием X в BoxLayout.)

...