Почему конструктор не работает в коде ниже?
Здесь я хочу выделить количество строк в таблице динамически с помощью конструктора. 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;
}
}
это модель абстрактной таблицы, в которой я хочу передать число строк в модель данных.
1 ответ
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];
}