Hallo zusammen,
ich möchte gerne meine Daten direkt aus dem Model.java in eine Tabelle reinbasteln und habe mich dazu in das TableModel Interface eingelesen. Nun erhalte ich jedoch einen Fehler, den ich nicht zuordnen kann.
Wenn ich die ganze Prozedur mit nur einer Spalte und 2 Zeilen versuche läuft alles rund. Sobald es jedoch an die 2 Spalten geht knallt es.
Und zwar habe ich die Werte - die in der Tabelle angezeigt werden sollen - in meiner Model-Klasse als Collection vorliegen. Also möchte ich diese erst in ein 2-dimensionales Array umwandeln. Das mache ich folgendermaßen:
Mein zugehöriges implementiertes TableModel schaut folgendermaßen aus:
Wie schon gesagt - so wie oben beschrieben funktioniert es.
Wenn ich nun jedoch eine 2. Spalte "Type" einfüge kracht es:
Aufbau des Arrays:
Veränderungen der Implementierung im TableModel Interface: Ich habe lediglich eine weitere Spalte eingefügt:
Und die Exception die ich bekomme schaut folgendermaßen aus:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at model.AttributesTableModelAdapter.getColumnClass(AttributesTableModelAdapter.java:43)
at javax.swing.JTable.getColumnClass(Unknown Source)
at javax.swing.JTable.getCellRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
Wo hakt es denn da?!
Vielen Dank schonmal für jede Hilfe!!
ich möchte gerne meine Daten direkt aus dem Model.java in eine Tabelle reinbasteln und habe mich dazu in das TableModel Interface eingelesen. Nun erhalte ich jedoch einen Fehler, den ich nicht zuordnen kann.
Wenn ich die ganze Prozedur mit nur einer Spalte und 2 Zeilen versuche läuft alles rund. Sobald es jedoch an die 2 Spalten geht knallt es.
Und zwar habe ich die Werte - die in der Tabelle angezeigt werden sollen - in meiner Model-Klasse als Collection vorliegen. Also möchte ich diese erst in ein 2-dimensionales Array umwandeln. Das mache ich folgendermaßen:
Code:
public Object[][] getAllAttributesAsArray(){
Iterator it = getAllAttributesAsCollection().iterator();
int row = 0;
int col = 0;
Object[][] attributes = new Object[2][1];
while (it.hasNext()){
DoorsAttribute currAttribute = (DoorsAttribute)it.next();
attributes[row][col] = currAttribute.getName();
row++;
}
}
Mein zugehöriges implementiertes TableModel schaut folgendermaßen aus:
Code:
package model;
public class AttributesTableModelAdapter extends AbstractTableModel {
Model model = new Model();
private String[] columnNames = {"Name"};
private Object[][] data = model.getAllAttributesAsArray();
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
/*
* JTable uses this method to determine the default renderer/
* editor for each cell. If we didn't implement this method,
* then the last column would contain text ("true"/"false"),
* rather than a check box.
*/
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
/*
* Don't need to implement this method unless your table's
* editable.
*/
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 2) {
return false;
} else {
return true;
}
}
/*
* Don't need to implement this method unless your table's
* data can change.
*/
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}
Wie schon gesagt - so wie oben beschrieben funktioniert es.
Wenn ich nun jedoch eine 2. Spalte "Type" einfüge kracht es:
Aufbau des Arrays:
Code:
public Object[][] getAllAttributesAsArray(){
Iterator it = getAllAttributesAsCollection().iterator();
int row = 0;
int col = 0;
Object[][] attributes = new Object[2][2];
while (it.hasNext()){
DoorsAttribute currAttribute = (DoorsAttribute)it.next();
attributes[row][col] = currAttribute.getName();
col++;
attributes[row][col] = currAttribute.getType();
row++;
col = 0;
}
}
Veränderungen der Implementierung im TableModel Interface: Ich habe lediglich eine weitere Spalte eingefügt:
Code:
private String[] columnNames = {"Name",
"Type"
};
Und die Exception die ich bekomme schaut folgendermaßen aus:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at model.AttributesTableModelAdapter.getColumnClass(AttributesTableModelAdapter.java:43)
at javax.swing.JTable.getColumnClass(Unknown Source)
at javax.swing.JTable.getCellRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
Wo hakt es denn da?!
Vielen Dank schonmal für jede Hilfe!!