У вас есть 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
перезапишут центральный компонент, оставив только один компонент в середине.