G
Guest
Gast
hallo,
ich hole mir daten aus einer datenbank und speichere die in einem vector:
wenn ich jetzt den datenvektor und einen 2.vektor mit den spaltentiteln an jTable übergebe, wird die auch richtig erzeugt. allerdings möchte ich, dass der benutzer die einträge nicht editieren kann. soweit ich weiß, geht das nur, wenn ich ein eigenes TabelModel benutze. hab mir also folgendes tableModel erstellt :
dann erstelle ich die jTable:
allerdings tritt beim zeichnen eine IndexOutOfBounsException auf....
es muss also irgendwas mit den vektoren sein, aber was?
Editiert von P3AC3MAK3R: Einrückung optimiert
ich hole mir daten aus einer datenbank und speichere die in einem vector:
Code:
try {
Class.forName(driver);
Connection con = DriverManager.getConnection(path, user, password);
DatabaseMetaData dbMeta = con.getMetaData();
String abfrage = "select jobid, phone, ip_addr, pagecount, stat_nr, ins_dat from t_fax";
Statement sta = con.createStatement();
ResultSet rs = sta.executeQuery(abfrage);
ResultSetMetaData meta = rs.getMetaData();
String s = "DB-Name: " + dbMeta.getDatabaseProductName() + "\n Version: " + dbMeta.getDatabaseProductVersion();
System.out.println(s);
System.out.println(meta.getColumnCount() + "\n\n");
//int x = 0;
while (rs.next()) { //durchläuft die Zeilen des Abfrageergebnisses
for (int i = 1; i <= meta.getColumnCount(); ++i) { //durchläuft die aktive Zeile und baut aus dieser einen Vektor
zeile.add(rs.getString(i));
}
this.matrix.addElement(zeile); //speichert die Zeilenvektoren in matrixvektor
zeile = new Vector();
}
con.close();
}
catch (Exception ex) {
System.out.println("Fehler hallo: " + ex.getMessage());
}
wenn ich jetzt den datenvektor und einen 2.vektor mit den spaltentiteln an jTable übergebe, wird die auch richtig erzeugt. allerdings möchte ich, dass der benutzer die einträge nicht editieren kann. soweit ich weiß, geht das nur, wenn ich ein eigenes TabelModel benutze. hab mir also folgendes tableModel erstellt :
Code:
class MyTableModel extends AbstractTableModel {
//private String[] columnNames;
//private Object[][] data ;
private Vector columnNames;
private Vector data;
public MyTableModel(Vector matrix, Vector spalten) {
//wieviele Elmente hat der Vektor?
/*int i = spalten.size();
columnNames = new String[i];
spalten.copyInto(this.columnNames);
int j = matrix.size();
data = new Object[i][j];
matrix.copyInto(this.data);*/
this.columnNames = spalten;
this.data = matrix;
}
public int getColumnCount() {
//System.out.println(columnNames.capacity());
//return columnNames.capacity();
return columnNames.size();
//return columnNames.length;
}
public int getRowCount() {
//return data.capacity();
return data.size();
//return data.length;
}
public String getColumnName(int col) {
//return columnNames[col];
return (String) this.columnNames.elementAt(col);
}
public Object getValueAt(int row, int col) {
//return data[row][col];
Vector zeile = new Vector(); //neuer Vektor zum zwischenspeichern der zeilen
zeile.addElement(this.data.elementAt(row)); //data ist ein zweidimensionaler Vektor
//System.out.println("\n\nDEBUG: "+zeile.size());
/*for (int i=0; i< zeile.size();i++){
System.out.println(zeile.elementAt(i));
}*/
//zeile = data.g
//return data.[col];
//Object[] ary = new Object[zeile.size()];
//zeile.copyInto(ary);
//return ary[col];
return zeile.elementAt(col);
//return new String("HAllo");
//return this.data.elementAt(col);
}
public boolean isCellEditable(int row, int col) {
return false;
}
}
dann erstelle ich die jTable:
Code:
jTable = new JTable(new MyTableModel(this.matrix, spalten));
allerdings tritt beim zeichnen eine IndexOutOfBounsException auf....
es muss also irgendwas mit den vektoren sein, aber was?
Editiert von P3AC3MAK3R: Einrückung optimiert