2012-05-02 58 views
13

Tôi muốn xóa tất cả các hàng của DefaultTable.I đã tìm thấy hai cách phổ biến để xóa chúng trên internet nhưng không có cách nào trong số chúng hoạt động trong trường hợp của tôi vì các phương thức đó không tồn tại trong DefaultTableModel .I của tôi tự hỏi tại sao: Mã của tôi để sử dụng DefaultTableModel làJava: Xóa tất cả các hàng của DefaultTableModel

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

Một cách để xóa là

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

nhưng phương pháp xóa này không tồn tại trong DefaultTableModel của tôi.

Hãy giúp tôi.

Trả lời

8

Tại sao làm phức tạp những điều đơn giản, nhưng để loại bỏ việc phải lặp đi lặp lại,

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

Mã dụ

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

Lý do không phức tạp những điều đơn giản là để tránh những sai lầm như bạn đã làm ở đây: nếu tuyên bố là dư thừa, nó không loại bỏ các hàng tại chỉ số 0 và nó không cần thiết cháy một sự kiện cho mỗi hàng. –

+0

@Wanter Laan cảm ơn vì đã thông báo sai lầm ngu ngốc, với phần còn lại tôi không đồng ý, cùng với câu trả lời ở đây, – mKorbel

+0

-1 vì nhấn mạnh vòng loại bỏ - bạn đã được cảnh báo ;-) – kleopatra

36

Bạn có thể đặt hàng đếm đến 0. setRowCount(0)

Trích từ documentation:

public void setRowCount(int rowCount) 

Thiết lập số lượng hàng trong mô hình. Nếu kích thước mới lớn hơn kích thước hiện tại, hàng mới sẽ được thêm vào cuối mô hình Nếu kích thước mới nhỏ hơn kích thước hiện tại, tất cả các hàng tại chỉ mục rowCount và lớn hơn sẽ bị hủy.

Nhưng khi bạn không thể tìm thấy removeRow hoặc là tôi nghi ngờ bạn chưa nhập bạn biến mô hình như DefaultTableModel có lẽ, có lẽ chỉ TableModel?

Trong trường hợp đó đúc TableModel của bạn để DefaultTableModel như thế này:

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

tôi đã được sử dụng typecasting cùng này nhưng vẫn phương pháp này doesn' t tồn tại – Xara

+2

Hiển thị mã cho chúng tôi. –

9

Tại sao bạn không đọc javadoc of DefaultTableModel?

public void removeRow (int hàng)

Loại bỏ hàng tại hàng từ mô hình. Thông báo về hàng bị bị xóa sẽ được gửi tới tất cả người nghe.

public void setDataVector (Vector dataVector, Vector columnIdentifiers)

Thay thế biến dụ dataVector hiện tại với mới Vector hàng, dataVector.

bộ trống công khaiRowCount (int rowCount)

Đặt số hàng trong mô hình. Nếu kích thước mới lớn hơn kích thước hiện tại, hàng mới sẽ được thêm vào cuối mô hình Nếu kích thước mới nhỏ hơn kích thước hiện tại, tất cả các hàng tại chỉ mục rowCount và lớn hơn sẽ bị hủy.

+0

tại sao bạn không đọc câu hỏi đầu tiên !!! –

11

Các bạn đã thử này này làm việc cho tôi ..

defaultTableModel.setRowCount(0); 
2

Chỉ cần tiếp tục xóa bảng hàng đầu tiên của mô hình cho đến khi không còn hàng nào nữa.

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

ypu có thể viết một phương pháp

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

sau đó gọi phương pháp này từ nơi mà bạn cần để xóa bảng

Các vấn đề liên quan