M
mbertholl
Hallo für eine Demo- Anwendung habe ich folgendes Beipiel aus Core Java 2 implemntiert:
//Zwei Ableitungen von Tablemodell - geht bis zu
----------------------
----------------------
Das Problem:
JTable enthält nur die Metadaten. Die Datenzeilen selber werden nicht angezeigt.
Hat jemand eine Idee?
Danke im Vorraus
mbertholl
//Zwei Ableitungen von Tablemodell - geht bis zu
----------------------
----------------------
Code:
abstract class ResultSetTableModel extends AbstractTableModel
{
/**
Konstruiert das Tabellenmodell.
@param aResultSet Anzuzeigende Ergebnismenge
*/
public ResultSetTableModel(ResultSet aResultSet)
{
rs = aResultSet;
try
{
rsmd = rs.getMetaData();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
public String getColumnName(int c)
{
try
{
return rsmd.getColumnName(c + 1);
}
catch(SQLException e)
{
e.printStackTrace();
return "";
}
}
public int getColumnCount()
{
try
{
return rsmd.getColumnCount();
}
catch(SQLException e)
{
e.printStackTrace();
return 0;
}
}
private ResultSet rs;
private ResultSetMetaData rsmd;
}
/**
Dieses Klasse verwendet einen bildlauffähigen Cursor (ein
JDBC 2-Feature), um Elemente der Ergebnismenge zu lokalisieren.
*/
class ScrollingResultSetTableModel extends ResultSetTableModel
{
/**
Konstruiert das Tabellenmodell.
@param aResultSet Anzuzeigende Ergebnismenge
*/
public ScrollingResultSetTableModel(ResultSet aResultSet)
{
super(aResultSet);
}
public Object getValueAt(int r, int c)
{
try
{
ResultSet rs = getResultSet();
rs.absolute(r + 1);
return rs.getObject(c + 1);
}
catch(SQLException e)
{
e.printStackTrace();
return null;
}
}
}
abstract class ResultSetTableModel extends AbstractTableModel
{
/**
Konstruiert das Tabellenmodell.
@param aResultSet Anzuzeigende Ergebnismenge
*/
public ResultSetTableModel(ResultSet aResultSet)
{
rs = aResultSet;
try
{
rsmd = rs.getMetaData();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
public String getColumnName(int c)
{
try
{
return rsmd.getColumnName(c + 1);
}
catch(SQLException e)
{
e.printStackTrace();
return "";
}
}
public int getColumnCount()
{
try
{
return rsmd.getColumnCount();
}
catch(SQLException e)
{
e.printStackTrace();
return 0;
}
}
/**
Holt die Ergebnismenge, die dieses Modell offen legt.
@return Die Ergebnismenge
*/
protected ResultSet getResultSet()
{
return rs;
}
private ResultSet rs;
private ResultSetMetaData rsmd;
}
/**
Dieses Klasse verwendet einen bildlauffähigen Cursor (ein
JDBC 2-Feature), um Elemente der Ergebnismenge zu lokalisieren.
*/
class ScrollingResultSetTableModel extends ResultSetTableModel
{
/**
Konstruiert das Tabellenmodell.
@param aResultSet Anzuzeigende Ergebnismenge
*/
public ScrollingResultSetTableModel(ResultSet aResultSet)
{
super(aResultSet);
}
public Object getValueAt(int r, int c)
{
try
{
ResultSet rs = getResultSet();
rs.absolute(r + 1);
return rs.getObject(c + 1);
}
catch(SQLException e)
{
e.printStackTrace();
return null;
}
}
}
---------------------------------------------------
---------------------------------------------------
rs holt sich per executeQuery die Daten - klappt auch!
jetzt die Übergabe an Tablemodell bzw an JTable
----------------------
//Übergabe Resultset an model
model = new ScrollingResultSetTableModel(rs);
//Übergabe model an JTable
table = new JTable(model);
-----------------------
Normalerweise bin ich davon ausgegangen das das alles ist. Weil es nicht funktioniert, habe ich noch folgendes implementiert:
--------------------------
colcount = model.getColumnCount();
rowcounbt = 0;
while(rs.next())
{
for(int i=0;i(istKleine)colcount;i++) //wegn Äger mit dem Editor
table = (JTable)model.getValueAt(rowcount,i);
rowcount++;
}
//Anfügen von Table an Scrollpane
scroll = new JScrollPane(table);
JTable enthält nur die Metadaten. Die Datenzeilen selber werden nicht angezeigt.
Hat jemand eine Idee?
Danke im Vorraus
mbertholl
Zuletzt bearbeitet von einem Moderator: