当我使用 DefaultTableModel 从 CachedRowSet 填充 jTable 时,为什么 JTable 的列标题没有更新?
When I populate a jTable from a CachedRowSet using the DefaultTableModel, why is the JTable's column title not updated?
当我使用 DefaultTableModel 从 CachedRowSet 填充 jTable 时,jtable 列的标题没有更新。所以我使用 jtable 属性 手动完成了它。有没有其他方法可以从数据库中自动获取标题名称?
此客户
public studentdetails()
{
initComponents();
try {
Interface b = (Interface) Naming.lookup("rmi://localhost:1099/Server");
DefaultTableModel tblModel =
(DefaultTableModel)studentdetailstable.getModel();
tblModel.setRowCount(0);
CachedRowSet studentdetails=b.getArray();
while(studentdetails.next())
{
Vector t = new Vector();
for(int i = 0; i <= studentdetails.getMaxRows(); i++)
{
t.add(studentdetails.getInt("id"));
t.add(studentdetails.getString("names"));
}
tblModel.addRow(t);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
实施
public CachedRowSet getArray() throws RemoteException {
try (Connection con = ConnectionProvider.getConnection();
Statement st = con.createStatement();
// ResultSet rs = st.executeQuery("select * from studentnames"))
ResultSet rs = st.executeQuery("select id, names from students")) {
RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet details= factory.createCachedRowSet();
fruitDetails.populate(rs);
return details;
}
catch (SQLException e) {
throw new RemoteException("Method 'getArray()' failed.", e);
}
CachedRowSet
继承方法 getMetaData
其中 returns ResultSetMetaData 可用于获取列的名称以及列数。 (参见下面的代码。代码后有更多解释。)
/* Required imports.
import java.rmi.Naming;
import java.sql.ResultSetMetaData;
import java.util.Vector;
import javax.sql.rowset.CachedRowSet;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
*/
public studentdetails() {
initComponents();
try {
Interface b = (Interface) Naming.lookup("rmi://localhost:1099/Server");
CachedRowSet details = b.getArray();
ResultSetMetaData rsmd = details.getMetaData();
int columnCount = rsmd.getColumnCount();
Vector<Object> columnNames = new Vector<>(columnCount);
for (int i = 0; i < columnCount; i++) {
columnNames.add(rsmd.getColumnLabel(i + 1));
}
Vector<Object> rows = new Vector<>();
while (details.next()) {
Vector<Object> row = new Vector<>(columnCount);
for (int i = 0; i < columnCount; i++) {
row.add(details.getObject(i + 1));
}
rows.add(row);
}
DefaultTableModel tblModel = new DefaultTableModel(rows, columnNames);
studentdetailstable.setModel(tblModel);
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
e.printStackTrace();
}
}
DefaultTableModel
包含一个 Vector
,其元素是 Vector
。每个元素都是 JTable
中的一行。因此,在上面的代码中,我创建并填充了一个 Vector
,它可以作为 DefaultTableModel
构造函数的参数之一。 DefaultTableModel
构造函数的另一个参数是 Vector
,其中包含 JTable
中列的名称。正如我已经说过的,列名可以从 ResultsetMetaData
.
中获得
创建新的 DefaultTableModel
后,我只需通过方法 setModel
.
将其分配给 JTable
当我使用 DefaultTableModel 从 CachedRowSet 填充 jTable 时,jtable 列的标题没有更新。所以我使用 jtable 属性 手动完成了它。有没有其他方法可以从数据库中自动获取标题名称?
此客户
public studentdetails()
{
initComponents();
try {
Interface b = (Interface) Naming.lookup("rmi://localhost:1099/Server");
DefaultTableModel tblModel =
(DefaultTableModel)studentdetailstable.getModel();
tblModel.setRowCount(0);
CachedRowSet studentdetails=b.getArray();
while(studentdetails.next())
{
Vector t = new Vector();
for(int i = 0; i <= studentdetails.getMaxRows(); i++)
{
t.add(studentdetails.getInt("id"));
t.add(studentdetails.getString("names"));
}
tblModel.addRow(t);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
实施
public CachedRowSet getArray() throws RemoteException {
try (Connection con = ConnectionProvider.getConnection();
Statement st = con.createStatement();
// ResultSet rs = st.executeQuery("select * from studentnames"))
ResultSet rs = st.executeQuery("select id, names from students")) {
RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet details= factory.createCachedRowSet();
fruitDetails.populate(rs);
return details;
}
catch (SQLException e) {
throw new RemoteException("Method 'getArray()' failed.", e);
}
CachedRowSet
继承方法 getMetaData
其中 returns ResultSetMetaData 可用于获取列的名称以及列数。 (参见下面的代码。代码后有更多解释。)
/* Required imports.
import java.rmi.Naming;
import java.sql.ResultSetMetaData;
import java.util.Vector;
import javax.sql.rowset.CachedRowSet;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
*/
public studentdetails() {
initComponents();
try {
Interface b = (Interface) Naming.lookup("rmi://localhost:1099/Server");
CachedRowSet details = b.getArray();
ResultSetMetaData rsmd = details.getMetaData();
int columnCount = rsmd.getColumnCount();
Vector<Object> columnNames = new Vector<>(columnCount);
for (int i = 0; i < columnCount; i++) {
columnNames.add(rsmd.getColumnLabel(i + 1));
}
Vector<Object> rows = new Vector<>();
while (details.next()) {
Vector<Object> row = new Vector<>(columnCount);
for (int i = 0; i < columnCount; i++) {
row.add(details.getObject(i + 1));
}
rows.add(row);
}
DefaultTableModel tblModel = new DefaultTableModel(rows, columnNames);
studentdetailstable.setModel(tblModel);
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
e.printStackTrace();
}
}
DefaultTableModel
包含一个 Vector
,其元素是 Vector
。每个元素都是 JTable
中的一行。因此,在上面的代码中,我创建并填充了一个 Vector
,它可以作为 DefaultTableModel
构造函数的参数之一。 DefaultTableModel
构造函数的另一个参数是 Vector
,其中包含 JTable
中列的名称。正如我已经说过的,列名可以从 ResultsetMetaData
.
创建新的 DefaultTableModel
后,我只需通过方法 setModel
.
JTable