Как добавить несколько компонентов в JFrame? - PullRequest
10 голосов
/ 15 ноября 2010

У меня есть JFrame .

У меня также есть класс Box , который расширяет Component .В этом классе ящиков есть метод paint , который создает заполненный прямоугольник.

Когда я добавляю несколько таких компонентов Box в свой JFrame, при вызове * 1013 отображается только последний добавленный компонент.* перекрасить на JFrame.

Я посмотрел на менеджеров по расположению, но я не уверен, что это то, что я хочу.Все, что я хочу, - это создавать анимацию из целого ряда прямоугольников, где бы я ни находился на экране.

(я также попытался создать панель, добавить панель в JFrame, а затем добавить всю коробку.компоненты к панели. Это тоже не сработало).

Заранее спасибо!

Ответы [ 5 ]

10 голосов
/ 15 ноября 2010

У вас есть 2 варианта.

Вы можете изменить макет вашей рамки:

JFrame frame;
frame.setLayout(new FlowLayout());

Теперь, если вы добавите более одного поля, оно будет отображаться в кадре.

Другой вариант - сделать то, что вы сказали, что пытались. (Добавление панели в рамку)

JPanel pane = new JPanel();
frame.add(pane);
(add the boxes to 'pane')

Кроме того, вы должны быть осторожны с размерами вашего Box. Возможно, вы захотите позвонить setPreferredSize() где-нибудь при создании Box. Это сообщит Java, какой размер сделать блок, когда он будет добавлен в макет.

Вам также следует ознакомиться с Руководствами по Java Layout Manager . Там очень много интересной информации.

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

0 голосов
/ 15 ноября 2010

Спасибо за все ваши ответы.

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

Я понял, что мой Box класс расширяет не ту вещь.Это должно было быть расширение javax.swing.Jcomponent.

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

0 голосов
/ 15 ноября 2010

Вы можете установить макет кадра на null, а затем использовать setBounds(), чтобы расположить свои ящики именно там, где вы хотите.

0 голосов
/ 15 ноября 2010

Сначала создайте макет на бумаге, а затем ознакомьтесь с менеджерами макетов Swing.

Помните, что некоторые компоненты Swing допускают добавление в них только одного компонента.Я сталкивался с этим при использовании панелей с вкладками.Каждая вкладка может принимать только один элемент управления (JPane?), Поэтому вам нужно создать отдельную панель с макетом, чтобы упорядочить соответствующие элементы управления, а затем как единое целое добавить панель на вкладку.В библиотеке Swing есть похожие механизмы.

0 голосов
/ 15 ноября 2010

Вам нужно проверить другие менеджеры по расположению.JFrame по умолчанию использует BorderLayout и без указания «места» добавления компонента, они добавляются в CENTER.В зависимости от того, как вы хотите, чтобы ваш пользовательский интерфейс выглядел, зависит от используемого менеджера макета.Я хотел бы предложить, возможно, использовать Netbeans GUI Builder.

РЕДАКТИРОВАТЬ: пропустил часть о том, что вы хотите добавить, но концепция остается той же, если вы просто добавите эти компоненты в менеджер по умолчанию, они будут перезаписаны,Похоже, вам может понадобиться нарисовать внутри только одного из ваших компонентов Box или создать JPanel и установить макет на null, но тогда вам придется разместить их явно.Действительно зависит от того, что именно вы хотите с ним делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...