2015-02-16 4 views
0

Я пытаюсь отобразить 2 панели, которые я создал в отдельных файлах один вверху и один внизу моего графического интерфейса с группой кнопок между их. Тем не менее, окно отображает только одну панель или группу кнопок за раз. Панель и группа кнопок отображаются правильно, но только последний, добавленный к кадру, отображается при любом выполнении.Swing GUI с FlowLayout, не будет отображаться на JFrame больше, чем последний добавленный компонент

Вот текущий код без каких-либо макетов ...

package UserGUI; 

import javax.swing.*; 
import java.awt.*; 

public class RealFrame extends JFrame { 
JButton Close = new JButton("Close"); 
JButton Proceed = new JButton("Proceed"); 
AuthorPanel header = new AuthorPanel(); 
FreeSpacePanel disk = new FreeSpacePanel(); 

public RealFrame() { 
    super();  
    ButtonGroup Ops = new ButtonGroup(); 
    Ops.add(Close); 
    Ops.add(Proceed); 
    JPanel OPS = new JPanel(); 
    OPS.add(Close); 
    OPS.add(Proceed); 
    add(disk); 
    add(OPS); 
    add(header); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(500,500); 
    setVisible(true); 
    } 
} 
+0

'«Swing GUI с FlowLayout»' - Где, черт возьми, вы установили менеджер компоновки любого контейнера в FlowLayout? Вы можете быть здесь слишком много. –

+0

1) Пожалуйста, изучите общую номенклатуру Java (соглашения об именах - например, 'EveryWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', если это не 'CONSTANT_ALL_UPPER') и использовать ее последовательно. 2) Чтобы получить более эффективную помощь, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short, Самостоятельный, правильный пример). –

+1

Спасибо, очень много! Это действительно моя проблема, я изменил настройки макета, и теперь он работает. Спасибо @ AndrewThompson. Я преподаю себе образцы и много проб и ошибок, поэтому я вернусь и исправлю свою бедную номенклатуру. HovercraftFullOfEels, я опубликовал это как название, потому что перед отправкой моего кода я использовал FlowLayout для всех компонентов, но я удалил его, чтобы дать пустой код. Я отметил это в комментариях, предшествующих коду; извините за путаницу. –

ответ

2

JFrame использует BorderLayout по умолчанию, поэтому, когда вы делаете ...

add(disk); 
add(OPS); 
add(header); 

Вы добавления каждого компонента в том же месте (CENTRE положение), но BorderLayout только макет последний добавлено.

Вместо этого, вы должны использовать что-то больше, как ...

add(disk, BorderLayout.NORTH); 
add(OPS); 
add(header, BorderLayout.SOUTH); 

См How to Use Borders для более подробной информации

2
add(disk); 
add(OPS); 
add(header); 

Менеджер компоновки по умолчанию на панели содержимого в JFrame является BorderLayout. Если вы не укажете ограничение, то компонент добавляется к BorderLayout.CENTER. В CENTER можно добавить только один компонент, чтобы отобразился только последний компонент.

Try:

add(disk, BorderLayout.NORTH); 
add(OPS, BorderLayout.CENTER); 
add(header, BorderLayout.SOUTH); 

, чтобы увидеть разницу.

Или попробуйте другой менеджер компоновки на рамке. См. How to Use Layout Manager для получения дополнительной информации.

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

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