Как добавить несколько компонентов в JFrame?

У меня есть JFrame.

У меня тоже Box класс, который расширяется компонент. Этот класс имеет поле краски метод, который делает закрашенный прямоугольник.

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

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

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

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

5 ответов


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

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

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

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

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

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

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

вы также должны взглянуть на Java Layout Manager Учебники. Там много отличной информации.

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


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


вам нужно проверить других менеджеров макетов. JFrame по умолчанию использует BorderLayout и без указания "места" добавляется компонент, они добавляются в центр. В зависимости от того, как вы хотите, чтобы ваш пользовательский интерфейс выглядел, зависит от используемого менеджера макетов. Я бы предложил использовать NetBeans GUI builder.

EDIT: пропустил часть о том, что вы хотите добавить, но концепция все та же, если вы просто добавите эти компоненты в диспетчер макетов по умолчанию, они получат перезаписанный. Похоже, вам может понадобиться сделать свою картину внутри одного из ваших компонентов коробки или создать JPanel и установить макет в null но тогда вам придется разместить их явно. Все зависит от того, что именно вы хотите с ним сделать.


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

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


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

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

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

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