現在、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();
}
パネルを作成する方法は単なるテストですが、先に進む前に動作する必要があります。パネルを作成して同じクラスに直接追加すると、正常に動作します。