2012-02-01 1 views
0

Как установить компонент (например, кнопку) в центре панели?

Я использовал Flowlayout с ограничением компоновки как центр, но я получаю кнопку на top-center позиция панели.Установить компонент в центре страницы

+1

Разве это не о время вы приняли ответ на этом вопросе? Вы также можете пройти через свои [более ранние вопросы] (http://stackoverflow.com/users/1114387/svkvvenky?tab=questions) и завершить некоторые из них. –

ответ

5

Использовать GridBagLayout вместо FlowLayout.

JPanel panel=new JPanel(); 
panel.setLayout(new GridBagLayout()); 
panel.add(new JButton("Sample")); // will use default value of GridBagConstraints 
+1

Первые две строки могут быть записаны как один. +1 (одна из немногих вещей, для которых я [использую GBL] (http://stackoverflow.com/a/5630271/418556).) –

+0

Спасибо за ваш ответ – svkvvenky

1

Используйте 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.

+2

-1 за то, что вы даже предложили макет 'null'. Измените это, и я удалю проголосовавший (но я не даю голосование за «MigLayout», когда есть 2 макета J2SE, которые могут делать то, что требуется). –

+2

Я никогда не понимал, почему «нулевой» макет настолько плох, но достаточно справедлив. Я оставляю свой ответ и принимаю -1. – rtheunissen

+0

См. [SetLayout (null) никогда не требуется. Когда-либо!] (Https://forums.oracle.com/forums/thread.jspa?threadID=1351374) для моих комментариев (некоторые некрасивые люди могут назвать это «напыщенностью») по этому вопросу. –

9

Это может быть достигнуто использованием либо GridBagLayout, как mentioned by AVD или BoxLayout. См. this answer для примера кода.

Лично я хотел бы использовать GBL для этого, потому что меньше строк кода требуется, чтобы получить компонент выложенный & на экране (с центром в родительском контейнере).

  1. Я не понимаю, почему этот ответ не получает более вверх голоса, но в стороне ..
+1

+1 для этого и этого - http://stackoverflow.com/questions/5621338/about-swing-and-jtable/5630271#5630271 – adatapost

+1

@AVD Это один из моих любимых ответов. Особенно из-за симпатичных снимков экрана, предоставленных trashgod (я часто беру их за иллюстрации точек в других потоках). На самом деле это прекрасно. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^