0

ここでは、コンストラクターを使用してテーブル内の行数を動的に割り当てたいと考えています。datamodel はクラスであり、 datamodel(int count) メソッドは no.of 行を割り当てます。

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;
    }
}

これは、データモデルに行数を渡したいabstracttablemodelです。

4

1 に答える 1

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];
}
于 2013-02-25T10:56:37.517 に答える