Как установить компонент (например, кнопку) в центре панели?
Я использовал Flowlayout
с ограничением компоновки как центр, но я получаю кнопку на top-center позиция панели.Установить компонент в центре страницы
ответ
Использовать GridBagLayout
вместо FlowLayout.
JPanel panel=new JPanel();
panel.setLayout(new GridBagLayout());
panel.add(new JButton("Sample")); // will use default value of GridBagConstraints
Первые две строки могут быть записаны как один. +1 (одна из немногих вещей, для которых я [использую GBL] (http://stackoverflow.com/a/5630271/418556).) –
Спасибо за ваш ответ – svkvvenky
Используйте null
расположение и установить границы этой кнопки, например:
// assuming you're extending JPanel
private JButton button; // data field
...
this.setLayout(null);
this.addComponentListener(new ComponentAdapter(){
public void componentResized(ComponentEvent e){
setButtonBounds();
}
});
private void setButtonBounds(){
int bw = 90; // button width
int bh = 30; // button height
int w = getWidth();
int h = getHeight();
button.setBounds((w - bw)/2, (h - bh)/2, bw, bh);
}
Если вы начнете получать много кнопок, или сложный макет, рассмотреть возможность использования MigLayout.
-1 за то, что вы даже предложили макет 'null'. Измените это, и я удалю проголосовавший (но я не даю голосование за «MigLayout», когда есть 2 макета J2SE, которые могут делать то, что требуется). –
Я никогда не понимал, почему «нулевой» макет настолько плох, но достаточно справедлив. Я оставляю свой ответ и принимаю -1. – rtheunissen
См. [SetLayout (null) никогда не требуется. Когда-либо!] (Https://forums.oracle.com/forums/thread.jspa?threadID=1351374) для моих комментариев (некоторые некрасивые люди могут назвать это «напыщенностью») по этому вопросу. –
Это может быть достигнуто использованием либо GridBagLayout
, как mentioned by AVD или BoxLayout
. См. this answer для примера кода.
Лично я хотел бы использовать GBL для этого, потому что меньше строк кода требуется, чтобы получить компонент выложенный & на экране (с центром в родительском контейнере).
- Я не понимаю, почему этот ответ не получает более вверх голоса, но в стороне ..
+1 для этого и этого - http://stackoverflow.com/questions/5621338/about-swing-and-jtable/5630271#5630271 – adatapost
@AVD Это один из моих любимых ответов. Особенно из-за симпатичных снимков экрана, предоставленных trashgod (я часто беру их за иллюстрации точек в других потоках). На самом деле это прекрасно. :) –
Разве это не о время вы приняли ответ на этом вопросе? Вы также можете пройти через свои [более ранние вопросы] (http://stackoverflow.com/users/1114387/svkvvenky?tab=questions) и завершить некоторые из них. –