Java swing --JPanel на JPanel не отображается - PullRequest
3 голосов
/ 18 марта 2012

Я пытаюсь добавить 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);

Ответы [ 2 ]

7 голосов
/ 18 марта 2012

Я считаю, что либо на вашей первой панели нет диспетчера раскладки, в этом случае вам нужно использовать setLayout ();

или

, потому что вторая панельне имеет ничего внутри, поэтому его предпочтительный размер равен 0. Попробуйте добавить новый JTextArea (10,5);и посмотрим, что произойдет.

2 голосов
/ 27 сентября 2012

У меня та же проблема:

  • Я использую раскладки
  • Я тоже пробовал с TextArea ... и ничего.
  • Показываетнормально с JFrame
  • Другие компоненты отображаются нормально (это базовые компоненты свинга)

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

...