2012-05-02 14 views
13

Voglio eliminare tutte le righe di DefaultTable.Ho trovato due modi comuni per eliminarle su Internet ma nessuna di esse funziona nel mio caso perché quei metodi non esistono nel mio DefaultTableModel .I Il codice per l'utilizzo di DefaultTableModel èJava: Rimozione di tutte le righe di DefaultTableModel

DefaultTableModel Table = (DefaultTableModel) Table.getModel();

Un modo per eliminare è

Table.removeRow (Table.getRowCount() - 1);

ma questo metodo di removerow non esiste nel mio DefaultTableModel.

Please help me out.

risposta

8

Perché complicare le cose semplici, ma rimuove deve essere iterativo,

if (myTableModel.getRowCount() > 0) { 
    for (int i = myTableModel.getRowCount() - 1; i > -1; i--) { 
     myTableModel.removeRow(i); 
    } 
} 

Codice esempio

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import javax.swing.table.*; 

public class RemoveAddRows extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private Object[] columnNames = {"Type", "Company", "Shares", "Price"}; 
    private Object[][] data = { 
     {"Buy", "IBM", new Integer(1000), new Double(80.50)}, 
     {"Sell", "MicroSoft", new Integer(2000), new Double(6.25)}, 
     {"Sell", "Apple", new Integer(3000), new Double(7.35)}, 
     {"Buy", "Nortel", new Integer(4000), new Double(20.00)} 
    }; 
    private JTable table; 
    private DefaultTableModel model; 

    public RemoveAddRows() { 

     model = new DefaultTableModel(data, columnNames) { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public Class getColumnClass(int column) { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     table = new JTable(model) { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
       Component c = super.prepareRenderer(renderer, row, column); 
       int firstRow = 0; 
       int lastRow = table.getRowCount() - 1; 
       int width = 0; 
       if (row == lastRow) { 
        ((JComponent) c).setBackground(Color.red); 
       } else if (row == firstRow) { 
        ((JComponent) c).setBackground(Color.blue); 
       } else { 
        ((JComponent) c).setBackground(table.getBackground()); 
       } 
       /*if (!isRowSelected(row)) { 
       String type = (String) getModel().getValueAt(row, 0); 
       c.setBackground("Buy".equals(type) ? Color.GREEN : Color.YELLOW); 
       } 
       if (isRowSelected(row) && isColumnSelected(column)) { 
       ((JComponent) c).setBorder(new LineBorder(Color.red)); 
       }*/ 
       return c; 
      } 
     }; 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane); 
     JButton button1 = new JButton("Remove all rows"); 
     button1.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent arg0) { 
       if (model.getRowCount() > 0) { 
        for (int i = model.getRowCount() - 1; i > -1; i--) { 
         model.removeRow(i); 
        } 
       } 
       System.out.println("model.getRowCount() --->" + model.getRowCount()); 
      } 
     }); 
     JButton button2 = new JButton("Add new rows"); 
     button2.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent arg0) { 
       Object[] data0 = {"Buy", "IBM", new Integer(1000), new Double(80.50)}; 
       model.addRow(data0); 
       Object[] data1 = {"Sell", "MicroSoft", new Integer(2000), new Double(6.25)}; 
       model.addRow(data1); 
       Object[] data2 = {"Sell", "Apple", new Integer(3000), new Double(7.35)}; 
       model.addRow(data2); 
       Object[] data3 = {"Buy", "Nortel", new Integer(4000), new Double(20.00)}; 
       model.addRow(data3); 
       System.out.println("model.getRowCount() --->" + model.getRowCount()); 
      } 
     }); 
     JPanel southPanel = new JPanel(); 
     southPanel.add(button1); 
     southPanel.add(button2); 
     add(southPanel, BorderLayout.SOUTH); 
    } 

    public static void main(String[] args) { 
     RemoveAddRows frame = new RemoveAddRows(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

Il motivo per non complicare le cose semplici è evitare errori come hai fatto qui: l'istruzione if è ridondante, non rimuove la riga dall'indice 0 e lancia inutilmente un evento per ogni riga. –

+0

@Walter Laan ringrazia per l'errore stupido notificato, con resto non sono d'accordo, lo stesso con una risposta qui, – mKorbel

+0

-1 per aver insistito sul ciclo di rimozione - sei stato avvisato ;-) – kleopatra

36

È possibile impostare il conteggio delle righe a 0. setRowCount(0)

Citazione di documentation:

public void setRowCount(int rowCount) 

Imposta il numero di righe nel modello. Se la nuova dimensione è maggiore di della dimensione corrente, nuove righe vengono aggiunte alla fine del modello Se la nuova dimensione è inferiore alla dimensione corrente, tutte le righe a indice rowCount e superiore vengono scartate.

Ma come non si può trovare removeRow né ho il sospetto che non hai digitato variabile modello come DefaultTableModel forse, forse solo TableModel?

In questo caso lanciare la vostra TableModel-DefaultTableModel in questo modo:

DefaultTableModel model = (DefaultTableModel) table.getModel(); 
+0

ho già utilizzato questo stesso typecasting ma ancora questo metodo doesn' t esistente – Xara

+2

Mostraci il tuo codice. –

9

Perché non leggere il javadoc of DefaultTableModel?

pubblico removeRow void (int row)

rimuove la riga alla riga dal modello. La notifica della rimozione della riga verrà inviata a tutti gli ascoltatori.

pubblico setDataVector vuoto (Vector dataVector, vettore columnIdentifiers)

sostituisce la variabile di istanza dataVector corrente con il nuovo vettoriale di righe, dataVector.

pubblico setRowCount void (int rowCount)

Imposta il numero di righe nel modello. Se la nuova dimensione è maggiore di della dimensione corrente, nuove righe vengono aggiunte alla fine del modello Se la nuova dimensione è inferiore alla dimensione corrente, tutte le righe a indice rowCount e superiore vengono scartate.

+0

perchè non leggi la domanda 1 !!! –

11

Hai provato questo Questo funziona per me ..

defaultTableModel.setRowCount(0); 
2

Basta continuare a rimuovere il tavolo prima riga del modello fino a quando non rimangono più righe.

// clean table 
DefaultTableModel myTableModel = (DefaultTableModel) this.myjTable.getModel(); 
while (myTableModel.getRowCount() > 0) { 
     myTableModel.removeRow(0); 
} 
0

Ypu può scrivere un metodo

public void clearTable() 
    { 
    getTableModel().setRowCount(0); 
    } 

quindi chiamare questo metodo dal luogo che è necessario sparecchiare la tavola

Problemi correlati