2016-02-16 2 views
-1

У меня есть серьезные проблемы, удаление строки из моей JTable, мой код такой же, как то, что я видел, когда я пытался узнать AbstractTableModel:удаление и добавление строк в JTable, используя AbstractTableModel

import javax.swing.table.AbstractTableModel; 

public class MyTableModel extends AbstractTableModel { 

      boolean DEBUG = true; 

      input_Data input = new input_Data(); 
      String[] columnNames = {"First Name", 
         "Last Name", 
         "Sport", 
         "# of Years", 
         "Vegetarian"}; 
      Object[][] data = { 
       {"Kathy", "Smith", 
        "Snowboarding", new Integer(5), new Boolean(false)}, 
       {"John", "Doe", 
         "Rowing", new Integer(3), new Boolean(true)}, 
       {"Sue", "Black", 
          "Knitting", new Integer(2), new Boolean(false)}, 
       {"Jane", "White", 
           "Speed reading", new Integer(20), new Boolean(true)}, 
       {"Joe", "Brown", 
            "Pool", new Integer(10), new Boolean(false)}; 


        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]; 
        } 
        public Class getColumnClass(int c) { 
         return getValueAt(0, c).getClass(); 
        } 


        public boolean isCellEditable(int row, int col) { 

         if (col < 2) { 
          return false; 
         } else { 
          return true; 
         } 
        } 
        public void removeRow(Row) 
        { 

         fireTableRowsDeleted(Row,Row); 

        } 
       } 

Но проблема что ничего не происходит, когда я вызываю removeRow !! Я думаю, что, возможно, мне тоже нужно редактировать данные, но как? Я новичок в java, и я действительно попал в эту проблему ...

+0

Используйте 'DefaultTableModel'. Он поддерживает метод removeRow(). – camickr

+0

Я не могу, мне нужен флажок в моей таблице, поэтому я не могу использовать DefaultTableModel – Marjan

+0

Нет причин, по которым вы не можете использовать DefaultTableModel. Вы просто сохраняете логическое значение в TableModel и переопределяете метод getColumnClass (...) 'для возврата Boolean, и в таблице будет выбран соответствующий рендерер. Нет причин создавать совершенно новый класс, чтобы переопределить единственный метод класса. – camickr

ответ

3

Вы ничего не удалили с помощью этого кода. Не используйте 2-мерный массив для ядра данных. Используйте ArrayList<CustomType> для ядра данных этого класса, фактически удалите строку данных из этого списка в вашем методе removeRow(int row), а затем вызовите метод fireTableRowsDeleted(...).