2013-02-25 2 views
0

Здесь я хочу выделить число строк в таблице динамически с помощью конструктора. datamodel - метод класса и datamodel (int count) присваивает номер строки.Почему конструктор не работает в коде ниже?

import javax.swing.table.AbstractTableModel; 

@SuppressWarnings("serial") 
public class datamodel extends AbstractTableModel{ 
    int row1; 
    datamodel(int count){ 

     row1 = count; 
     count = 0; 
    } 

    private String[] columnNames = {"Sl No","Material Code", "Material Name", "Select", "Received QTY", "Unit", "To Be Delivered", "PO No", "PO Sl"};//new String[9]; 
    //table has 100 rows and 9 columns 
    private Object[][] data = new Object[row1][9]; 


    public int getColumnCount() { return columnNames.length; } 
    public int getRowCount() { return data.length;} 
    public String getColumnName(int col) { 
     // TODO Auto-generated method stub 
     return columnNames[col]; 
    } 

    public Object getValueAt(int row, int col) { 
     // TODO Auto-generated method stub 
     return data[row][col]; 
    } 

    @Override 
    public void setValueAt(Object aValue, int row, int col) { 
     // TODO Auto-generated method stub 
     data[row][col] = aValue; 
     fireTableCellUpdated(row, col); 
    } 

    public boolean isCellEditable(int rowIndex, int columnIndex) { 
     // TODO Auto-generated method stub 
     return true; 
    } 

    public Class getColumnClass(int col) { 
     if((col == 4) || (col == 6)) 
      return Double.class; 
      //return getValueAt(0, c).getClass(); 
     else if(col == 3) 
      return Boolean.class; 
     else 
      return String.class; 
    } 
} 

это абстрактная модель, где я хочу передать количество строк в datamodel.

+4

Что не работает? – Starx

+0

И где вы вызываете своего конструктора и как? –

+1

В качестве стороннего использования используйте '@ Override' последовательно. – trashgod

ответ

5
int row1; 
datamodel(int count){ 
    row1 = count; 
    count = 0; 
} 

Вы установки локальных переменнаяcount к нулю. Это не влияет на поле row1.

Теперь, внимательно посмотрев на свой код. Сильный совет: отступы от вашего кода, придерживайтесь соглашений об именах, собирайте все объявления полей в верхней части файла. Тогда это легче для нас, чтобы понять код ..

int row1; 
private Object[][] data = new Object[row1][9]; 

datamodel(int count) { 
    row1 = count; 
    count = 0; 
} 

Что вы хотите сделать: передать значение с помощью конструктора, так что массив инициализируется. Ваш подход не будет работать, потому что массив создается до метод конструктора get выполняется. Таким образом, у вас всегда есть Object [0] [9], независимо от того, что вы передаете с помощью конструктора.

Вы должны создать метод конструктора вместо массива внутри:

int row1; 
private Object[][] data; 

datamodel(int count) { 
    row1 = count; 
    data = new Object[count][9]; 
} 
Смежные вопросы