Buongiorno marbio17, facciamo così, adesso posto un pò di codice, dimmi dove metteresti il repaint()..
allora mi sono costruito un Layout a casella, quindi la mia JTable sta in un box orizzontale.
//Classe che gestisce la tabella JTablecodice:Box b5= Box.createVerticalBox(); Box b6= Box.createHorizontalBox(); b6.add(new JLabel("Contenuti presenti nel database")); b5.add(b6); b5.add(Box.createVerticalStrut(5)); //JTable b6=Box.createHorizontalBox(); //classe che mi gestisce la tabella MyTableModel model = new MyTableModel(); table.setFillsViewportHeight(true);//mi rende la parte senza valori dello stesso colore initColumnSizes(table);//setta la larghezza delle colonne. table.setRowSelectionAllowed(true); table.setColumnSelectionAllowed(false); table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); jsp= new JScrollPane(); jsp.getViewport().add(table);//metto alla tabella uno scrollpane b6.add(jsp); b5.add(b6);//aggiunta la tabella
e questo è l'action listener del pulsante "cancella" che mi fa sparire i dati dal database ma non la riga selezionata, quindi non fa il refresh.codice:class MyTableModel extends AbstractTableModel { private TableColumn column = null; private Object[][] data;//matrice di oggetti private String[] columnNames = {"Titolo", // titoli delle colonne "Autore", "Tipologia", "Nome file", "Mb", "Supporto", "Indice", "Commenti"}; public MyTableModel(){ temp =mt.trova();//metodo che mi raccoglie i dati dopo una query al DB data=new Object[temp.length][8]; for(int i=0;i<temp.length;i++){ data[i][0]=temp[i].getTitolo(); data[i][1]=temp[i].getAutore(); data[i][2]=temp[i].getTipologia(); data[i][3]=temp[i].getNome_file(); data[i][4]=temp[i].getDimensione(); data[i][5]=temp[i].getSupporto(); data[i][6]=temp[i].getIdsupporto(); data[i][7]=temp[i].getCommento(); } } public int getColumnCount() { return columnNames.length; } public int getRowCount() { return data.length; } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int row, int col) { return data[row][col]; } /* * JTable uses this method to determine the default renderer/ * editor for each cell. If we didn't implement this method, * then the last column would contain text ("true"/"false"), * rather than a check box. */ public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } /* * questo metodo rende le celle editabili */ public boolean isCellEditable(int row, int col) { return true; //if (col < 2) { // return false; //} else { // return true; //} } /* * Don't need to implement this method unless your table's * data can change. */ public void setValueAt(Object value, int row, int col) { if (DEBUG) { System.out.println("Setting value at " + row + "," + col + " to " + value + " (an instance of " + value.getClass() + ")"); } data[row][col] = value; fireTableCellUpdated(row, col); if (DEBUG) { System.out.println("New value of data:"); printDebugData(); } } private void printDebugData() { int numRows = getRowCount(); int numCols = getColumnCount(); for (int i=0; i < numRows; i++) { System.out.print(" row " + i + ":"); for (int j=0; j < numCols; j++) { System.out.print(" " + data[i][j]); } System.out.println(); } System.out.println("--------------------------"); } }
ecco io adesso come faccio a fare sto benedetto refresh con questa situazione..sto uscendo pazzo eh eh..codice:if (o instanceof JButton) { if(o==cancella){ try{ if(table.getSelectedRow()==-1){//se non hai selezionato niente JOptionPane.showMessageDialog(null,"Non hai selezionato niente", "Attenzione",JOptionPane.ERROR_MESSAGE); }else{ int temp[] = table.getSelectedRows();//creo l'array delle righe selezionate int i=0; while (i<temp.length){ String titolo = (String)table.getValueAt(temp[i],0); String autore = (String)table.getValueAt(temp[i],1); String tipologia = (String) table.getValueAt(temp[i],2); String nome_file = (String) table.getValueAt(temp[i],3); int dimensione = (Integer)table.getValueAt(temp[i],4); String supporto = (String) table.getValueAt(temp[i],5); String idsupporto = (String) table.getValueAt(temp[i],6); String commento = (String) table.getValueAt(temp[i],7); VoceDistributore v=new VoceDistributore(titolo,autore,tipologia,nome_file,dimensione,supporto,idsupporto,commento); mt.cancella(v); //chiamo il metodo per la cancellazione sul db che funziona i++; } new MyTableModel();//qui ho provato a richiamare la classe per ricaricare i dati } } catch(VoceAssente e){ JOptionPane.showMessageDialog(null,"Non esiste l'oggetto selezionato", "Attenzione",JOptionPane.ERROR_MESSAGE); } }
ciao e grazie

Rispondi quotando