2015-08-08 2 views
1

У меня возникла проблема с перерисованием 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); 
} 

ответ

1

Не удаляйте компоненты с панели.

Все, что вам нужно сделать, это заменить таблицуModel таблицы, и таблица обновит себя.

Поэтому, когда вы создаете фрейм, создайте таблицу и прокрутите панель в конструкторе и добавьте панель прокрутки в рамку.

JTable table = new JTable(); 
JScrollPane = new JScrollPane(table); 
panel.add(scrollPane); 

Затем в логике обновления кода становится просто:

ZleceniaModel model = new ZleceniaModel(tableHeaders,tableData); 
table.setModel(model); 
//JTable table = new JTable(model);    
//JScrollPane scrollPane = new JScrollPane(table);     
//tableResizer(tablePanel, scrollPane, tabelaNr); 
//tablePanel.add(scrollPane); 
//tablePanel.revalidate(); 
//tablePanel.repaint(); 
+0

Спасибо, я нашел solutin. Выдача заключалась в том, что я не запускал fuction из: public void componentShown (ComponentEvent e) {} –

Смежные вопросы