Отображение JComponent внутри JPanel на JFrame - PullRequest
3 голосов
/ 25 августа 2010

Я не могу отобразить JComponent внутри JPanel на JFrame.

Следующее не работает.

JComponent component = ...
panel.add(component, BorderLayout.CENTER);
frame.add(panel, BorderLayout.CENTER);

Но если я добавлю JComponent к JFrame [как frame.add(component, BorderLayout.CENTER);], он отобразит содержимое.

Любые идеи

Ответы [ 2 ]

5 голосов
/ 25 августа 2010

A JPanel по умолчанию представляет собой FlowLayout, поэтому вам не нужно указывать центр панели.

Просто сделайте:

panel.add(component);

Либо сделайте:

panel.setLayout(new BorderLayout());
panel.add(component, BorderLayout.CENTER);
2 голосов
/ 25 августа 2010

По умолчанию JComponent не имеет предпочтительного размера.

По умолчанию JPanel использует FlowLayout.Когда вы добавляете компонент на панель, он будет учитывать предпочтительный размер компонента, который равен 0, поэтому вы его не видите.

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

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

...