0

現在、Netbeans GUI ビルダーを使用して Java Swing GUI を作成しています。一連のパネルを別のパネルに動的に追加しようとしていますが、表示されません。私はすでに repaint(), revalidate(), updateUI() および setvisible(true) を、おそらく意味のあるすべてのポイントから使用しようとしました。パネルがコンテナに追加されているかどうかもテストしました。それらは追加されますが、単に表示されません。

パネルを追加するコードは次のとおりです。

    public void setArrangement(LinkedList<PanelScheduleMusician> scheduledPlaces, LinkedList<PanelMusician> assignedMusicians, LinkedList<PanelMusician> freeMusicians) {

    _scheduledPlaces = scheduledPlaces;
    _assignedMusicians = assignedMusicians;
    _freeMusicians = freeMusicians;
}

public void displayPanels() {

    if(_assignedMusicians != null && _assignedMusicians.size() > 0) {
        Iterator<PanelScheduleMusician> iterator = _scheduledPlaces.iterator();
        for(PanelMusician p: _assignedMusicians) {
            iterator.next().setMusician(p);
        }
    }

    if(_scheduledPlaces != null && _scheduledPlaces.size() > 0) {
        GroupLayout layout = new GroupLayout(panelAssignedMusician);
        panelAssignedMusician.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        GroupLayout.ParallelGroup parallelGroup = layout.createParallelGroup();
        GroupLayout.SequentialGroup sequentialGroup = layout.createSequentialGroup();

        for(PanelScheduleMusician p: _scheduledPlaces) {
            parallelGroup.addComponent(p);
            sequentialGroup.addComponent(p);
        }
        layout.setHorizontalGroup(parallelGroup);
        layout.setVerticalGroup(sequentialGroup);
    }

    if(_freeMusicians != null && _freeMusicians.size() > 0) {
        GroupLayout layout = new GroupLayout(panelFreeMusician);
        panelFreeMusician.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        GroupLayout.ParallelGroup parallelGroup = layout.createParallelGroup();
        GroupLayout.SequentialGroup sequentialGroup = layout.createSequentialGroup();

        for(PanelMusician p: _freeMusicians) {
            parallelGroup.addComponent(p);
            sequentialGroup.addComponent(p);
        }
        layout.setHorizontalGroup(parallelGroup);
        layout.setVerticalGroup(sequentialGroup);
    }
}

public void reset() {
    removeAll();
    initialise();
}

private void initialise() {
    initComponents();
    displayPanels();
    revalidate();
    updateUI();

}

ここで、パネルを作成してメソッドを呼び出します。

    public FormEditDuty() {
    initComponents();

    LinkedList<PanelScheduleMusician> l1 = new LinkedList<>();
    LinkedList<PanelMusician> l2 = new LinkedList<>();
    LinkedList<PanelMusician> l3 = new LinkedList<>();

    l1.add(new PanelScheduleMusician());
    l1.add(new PanelScheduleMusician());
    l1.add(new PanelScheduleMusician());
    l1.add(new PanelScheduleMusician());

    l3.add(new PanelMusician());
    l3.add(new PanelMusician());
    l3.add(new PanelMusician());

    panelVioline1.setArrangement(l1, l2, l3);
    panelVioline1.reset();
}

パネルを作成する方法は単なるテストですが、先に進む前に動作する必要があります。パネルを作成して同じクラスに直接追加すると、正常に動作します。

4

0 に答える 0