FlowLayout
просто помещает компонент один рядом с другим в порядке слева направо. Когда ширина достигает одного из контейнеров, которые имеют этот макет, он просто переносится на другую строку.
Если вы хотите разместить их в макете в виде сетки (как вам кажется, вы хотите), вы можете использовать GridLayout
, который позволяет указать количество столбцов и строк:
component.setLayout(new GridLayout(2,2))
Единственным недостатком GridLayout
является то, что каждая ячейка сетки будет иметь тот же размер (что обычно хорошо, если у вас только есть JButtons
или JLabels
, но когда вы смешиваете вещи, это будет визуально плохо).
Если вам действительно нужно больше энергии, переходите к GridBagLayout
, очень настраиваемому, но с более крутым
Вероятно, проблема вашего размера связана с тем, что вы используете setSize
, но в Swing эти вещи имеют странное поведение, вы должны попробовать, установив setPreferredSize(200,200)
вместо setSize
. Но не спрашивайте меня, почему!
ПРИМЕЧАНИЕ: вы должны ВСЕГДА обращаться к области содержимого фрейма, а не к кадру. Когда вы устанавливаете макет, вы должны делать getContentPane().setLayout(..)
, когда вы добавляете элементы, которые вы должны делать getContentPane().add(..)
и т. Д.
Исправлены: теперь каждый JFrame
add
, remove
, setLayout
автоматически перейдите на панель содержимого.
Это решение должно работать
.main{
position: relative;
display: -ms-flexbox;
display: flex;
vertical-align: middle;
}
.main .c{
margin-left: auto;
order: 2;
}
<div class="main">
<div class="a"><a href="#">Home</a></div>
<!--<div class="b"><a href="#">Some title centered</a></div>-->
<div class="c"><a href="#">Contact</a></div>
</div>
System.IO.Path
функции помощника. Иначе, всегда будет то, что один пограничный случай, который кусает Вас. – Daniel Pryden 22 September 2009 в 05:44