user4863117
user4863117

Reputation:

How to repaint JPanel

I am having a problem with JPanel repaint after update. So, I have a function which adds a few (user selection) JTable to JPanel. On first use, everything is ok, all components are ok. But when I run a second time the same function, all components disappear. And I do not understand why. When I check list of components in JPanel that is ok but I do not see not even one.

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);  
 }

Upvotes: 1

Views: 59

Answers (1)

camickr
camickr

Reputation: 324108

Don't remove the components from the panel.

All you need to do is replace the TableModel of the table and the table will update itself.

So when you create the frame create the table and scroll pane in the constructor and add the scroll pane to the frame.

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

Then in your refresh logic the code just becomes:

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();

Upvotes: 1

Related Questions