У меня возникла проблема с перерисованием JPanel после обновления. Итак, у меня есть функция, которая добавляет несколько (пользовательский выбор) JTable в JPanel. При первом использовании все в порядке, все компоненты в порядке. Но когда я запускаю второй раз ту же функцию, все компоненты исчезают. И я не понимаю, почему. Когда я проверяю список компонентов в JPanel, это нормально, но я не вижу даже одного.Как перерисовать JPanel
private void refreshTables(){
tablePanel.removeAll();
List resultListUzytkownicy=null;
try {
resultListUzytkownicy = DAO.GlobalDOA.getQuery("from Uzytkownik u where u.widokWPlanownaiu=1");}
catch (IOException ex) {Logger.getLogger(PlanowanieFrame.class.getName()).log(Level.SEVERE, null, ex);}
int tabelaNr = 0;
Vector<String> tableHeaders = new Vector<String>();
tableHeaders.add("ID:");
tableHeaders.add("Kategoria:");
tableHeaders.add("Podkategoria:");
tableHeaders.add("Data przyjęcia:");
tableHeaders.add("Przyjmujący:");
tableHeaders.add("Serwisujący:");
tableHeaders.add("Data zamknięcia:");
tableHeaders.add("Zamykający:");
tableHeaders.add("Klient:");
tableHeaders.add("Status:");
tableHeaders.add("Opis:");
tableHeaders.add("Termin:");
tableHeaders.add("Priorytet:");
tableHeaders.add("Podzlecenia:");
for(Object o : resultListUzytkownicy){
Uzytkownik user = (Uzytkownik)o;
List resultList = null;
try {
resultList = DAO.GlobalDOA.getQuery("from Zlecenie z where z.podzlecenie=0 and z.serwisujacy="+user.getId()+" order by id desc");}
catch (IOException ex) {Logger.getLogger(PlanowanieFrame.class.getName()).log(Level.SEVERE, null, ex);}
Vector tableData = new Vector();
for(Object b : resultList) {
Zlecenie actor = (Zlecenie)b;
Vector<Object> oneRow = new Vector<Object>();
oneRow.add(actor.getId());
if(actor.getKategoria()!=null){oneRow.add(actor.getKategoria().getTemat());}
else{oneRow.add(null);};
if(actor.getPodkategoria()!=null){oneRow.add(actor.getPodkategoria().getTemat());}
else{oneRow.add(null);};
oneRow.add(DateRender.longDate(actor.getDataPrzyjecia()));
oneRow.add(actor.getPrzyjmujacy().getImie()+" "+actor.getPrzyjmujacy().getNazwisko());
if(actor.getSerwisujacy()!=null){oneRow.add(actor.getSerwisujacy().getImie()+" "+actor.getSerwisujacy().getNazwisko());}
else{oneRow.add(null);};
if(actor.getDataZamkniecia()!=null){oneRow.add(DateRender.longDate(actor.getDataZamkniecia()));}
else{oneRow.add(null);};
if(actor.getZamykajacy()!=null){oneRow.add(actor.getZamykajacy().getImie()+" "+actor.getZamykajacy().getNazwisko());}
else{oneRow.add(null);};
if(actor.getKlient()!=null){oneRow.add(actor.getKlient().getNazwa());}
else{oneRow.add(null);};
oneRow.add(DAO.StatusDAO.getStatusById(actor.getStatus()).getOpis());
oneRow.add(actor.getOpis());
oneRow.add(actor.getTermin());
oneRow.add(actor.getPriorytet());
oneRow.add(actor.getPodzlecenia());
tableData.add(oneRow);
}
ZleceniaModel model = new ZleceniaModel(tableHeaders,tableData);
JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
tableResizer(tablePanel, scrollPane, tabelaNr);
tablePanel.add(scrollPane);
tablePanel.revalidate();
tablePanel.repaint();
System.out.println(tablePanel.getComponents());
tabelaNr++;
}
}
public static void tableResizer(JPanel panel, JScrollPane scrollPane, int tableaNr){
ComponentListener componentListener = new ComponentListener(){
@Override
public void componentResized(ComponentEvent e) {
int panelWidth = panel.getWidth();
scrollPane.setPreferredSize(new Dimension(panelWidth, 100));
scrollPane.setBounds(0, tableaNr*100, panelWidth, 100);
}
@Override
public void componentMoved(ComponentEvent e) {}
@Override
public void componentShown(ComponentEvent e) { }
@Override
public void componentHidden(ComponentEvent e) { }
};
panel.addComponentListener(componentListener);
}
Спасибо, я нашел solutin. Выдача заключалась в том, что я не запускал fuction из: public void componentShown (ComponentEvent e) {} –