0

私のプログラムでは、いくつかのデータをJTable. 私はデータを含むクラスを持っているので、それを で表示する最も簡単な方法はJTable、クラスを拡張してTableModelインターフェイスを実装し、それを のモデルとして使用するようですJTable。残念ながら、私にとっては正しく機能しません。プログラムが を描画しようとするとJTable、 aNullPointerExceptionが にスローされjavax.swing.JTable.prepareRenderer()ます。なんで?

package bridgecalc;

import java.util.HashSet;

import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

public class MyTableModel extends MyDataClass implements TableModel {

    private static final long serialVersionUID = 1L;
    // private Object[][] data; //this is in fact declared in the superclass
    private static final String[] colNames = {"bla", "blabla", "hola", "hej", "egle", "begle", "eciepecie"};
    private HashSet<TableModelListener> listeners;

    public MyTableModel() {
        data = new Object[7][7];
        listeners = new HashSet<TableModelListener>();
    }

    @Override
    public int getColumnCount() {
        return data.length;
    }

    @Override
    public int getRowCount() {
        return data[0].length;
    }

    @Override
    public Object getValueAt(int arg0, int arg1) {
        return data[arg0][arg1];
    }

    @Override
    public void addTableModelListener(TableModelListener l) {
        listeners.add(l);
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return null;
    }

    @Override
    public String getColumnName(int columnIndex) {
        return colNames[columnIndex];
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (rowIndex == columnIndex)
            return false;
        else return true;
    }

    @Override
    public void removeTableModelListener(TableModelListener l) {        
        listeners.remove(l);
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        data[columnIndex][rowIndex] = aValue;
    }

}

そして、プログラムのどこかで:

...
JTable table = new JTable(new MyTableModel());
this.setViewportView(table);
...

助けてくれてありがとう。

4

1 に答える 1