Я пытаюсь добавить JPanel к другой JPanel, но столкнулся с проблемой, что вторая Jpanel не будет отображаться на первой.
Моя основная структура вещей следующая -
У меня есть JPanel panel1
, который имеет BoxLayout
, и в силу HorizontalBoxes
и VerticalBoxes
я продолжаю добавлять JComponents
к нему. Все JComponents
отображаются на панели 1, кроме второго JPanel
.
Код для второго JPanel
, который не появится, выглядит следующим образом -
public class LabelMacroEditor extends JPanel implements PropertyChangeListener {
private static final long serialVersionUID = 1L;
private LabelMacroModel model;
public LabelMacroEditor(LabelMacroModel bean) {
this.model = bean;
model.addPropertyChangeListener(this);
setupComponents();
validate();
setVisible(true);
}
public void setupComponents()
{
Box allButtons = Box.createVerticalBox();
for(MacroModel macroModel : model.getMacroModelList())
{
LabelMacroEditorEditableEntity macroEditorEntity = new LabelMacroEditorEditableEntity(macroModel);
Box entityBox = Box.createHorizontalBox();
entityBox.add(macroEditorEntity.getUpButton());
entityBox.add(Box.createHorizontalStrut(15));
entityBox.add(macroEditorEntity.getMacroDetailsButton());
entityBox.add(Box.createHorizontalStrut(15));
entityBox.add(macroEditorEntity.getDownButton());
allButtons.add(entityBox);
}
add(allButtons);
}
@Override
public void propertyChange(PropertyChangeEvent arg0) {
revalidate();
}
}
Я протестировал LabelMacroEditor
в автономном режиме, добавив его в JFrame и обнаружил, что он выглядит нормально. Я предполагаю, что это как-то связано с конфликтом переустановки / setVisible или чем-то подобным.
Я что-то упускаю из виду?
Я могу выложить больше кода из JPanel
, который добавляет LabelMacroEditor
, если есть необходимость.
РЕДАКТИРОВАТЬ:
Фрагмент кода, из которого я добавляю LabelMacroEditor
, выглядит следующим образом -
private final LabelMacroModel labelMacroModel;
private LabelMacroEditor labelMacroEditor;
//code to populate labelMacroModel
Box verticalBox = Box.createVerticalBox();
// Add all other JComponents to verticalBox
labelMacroEditor = new LabelMacroEditor(labelMacroModel);
verticalBox.add(labelMacroEditor);
add(verticalBox);