내 프로그램에서 JTable
에 일부 데이터를 표시하려고합니다. 데이터를 포함하는 클래스가 있으므로 JTable
에있는 가장 쉬운 방법은 클래스를 확장하여 TableModel
인터페이스를 구현하고 JTable
의 모델로 사용하는 것 같습니다. 불행히도 그것은 나를 위해 올바르게 작동하지 않습니다. 프로그램에서 JTable
을 그릴 때 에 NullPointerException
이 발생합니다. 왜? Java TableModel 구현으로 프로그램이 충돌 함
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);
...
감사합니다.
감사합니다. 나는 그것을 고려했다. 의도적으로'AbstractTableModel'을 확장하는 대신'TableModel'을 구현하기로 결정했습니다. MyDataClass는 내 데이터에 편리한 conatainer이며 몇 가지 추가 방법 만 필요합니다. Extending'AbstractTableModel'은 많은 코드를 purpouse로 다시 작성하도록 강요합니다 ... – Sventimir
이벤트 핸들링이 코드에 없으면 훨씬 더 깨끗합니다. 정말로 첫 번째 줄에 넣은 데이터 클래스에 대한 아이디어를 시도해보십시오. –
내 코드에서 이벤트를 처리하지 않습니다. 나는 청취자 만 관리합니다 ... 당신의 sollution 잘 작동합니다, 많이 고마워요! :) – Sventimir