JTable data, columnNames глобально, разные классы

 
0
 
Java
ava
darkvivi | 05.10.2013, 23:16
 Здравствуйте! Меня интересует очень  любопытный вопрос:
Есть класс


class MyTableModel extends AbstractTableModel {  
    
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    String[] columnNames={
        "A"
         };
        
    Object[][] data;
   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];  
   }  

   /*
    * Don't need to implement this method unless your table's
    * editable.
    */  
   public boolean isCellEditable(int row, int col) {  
       //Note that the data/cell address is constant,  
       //no matter where the cell appears onscreen.  
         
           return true;  
      
   }  
   public void setValueAt(Object value, int row, int col) {  
          // System.out.println("Setting value at " + row + "," + col  
            //                  + " to " + value  
              //                + " (an instance of "   
                //              + value.getClass() + ")");  
       
       data[row][col] = value;  
       fireTableCellUpdated(row, col);  
           System.out.println("New value of data:");  
         
   }  
     
   public void addRow(int row, int col) {  
     
   //Don't know what to do here  
   this.fireTableRowsInserted(row, col);  
    
   }  
     
   public void delRow(int row, int col) {  
   //Don't know what to do here  
   this.fireTableRowsDeleted(row, col);  
     
   }  
     
}  



Мне нужно заполнить таблицу в другом классе, не в MyTableModel, а в главном, где ещё main(...) присутствует. Я подумал и решил, что стоит заполнять массив данных через  setValueAt(). Как я понял, под object понимается сама переменная. Сделаем наприме так model.setValueAt("Moo",0,0), однако таким образом я получаю ошибку java.lang.NullPointerException


MyTableModel model = new MyTableModel();
          table = new JTable(model);
          model.setValueAt("Moo",0,0);


Что делать?  smile 
Comments (1)
ava
Mirkes | 06.10.2013, 11:11 #
Я бы сказал, что если уж Вы решили добавить строку в таблицу, то неплохо бы сообщить об этом модели, что бы она знала о наличии этой строки и создала место для нее.

Модель отвечает за хранение данных и за выдачу данных в JTable по запросам от JTable. Очевидно, что модель может выполнять и другие запросы от других компонентов. Однако для того, чтобы она как-то изменила структуру данных ей надо об этом сообщить. Или изменить логику работы. Например в методе setValueAt проверить наличие указанных строки и столбца, и если их еще нет, то создать. Хотя я считаю, что более правильным было бы добавить отдельные методы для создания новых строк и столбцов. Кроме того, можно создать отдельный метод для замены всех данных. И так далее, в зависимости от логики Вашего приложения.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit