Как добавить несколько компонентов в 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, добавьте мои компоненты в эту панель, они все появятся правильно.