这是客户
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
,该方法返回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));
}
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));
}
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
中的一行。因此,在上面的代码中,我创建并填充了一个向量
,它可以作为DefaultTableModel
构造函数的参数之一。DefaultTableModel
构造函数的另一个参数是向量
,它包含JTable
中列的名称。正如我已经说过的,列名可以从ResultsetMetadata
中获得。
在创建新的DefaultTableModel
之后,我只需通过方法setmodel
将其分配给JTable
。
我不明白为什么我的没有更新。 下面是我的代码: 这是调用这些方法的main类的代码: 在中,在循环之后,我尝试过: .invalidate()方法在GUI的每个组件上(即使不推荐) GUI每个组件的 方法 方法(即使不推荐) 从方法中的2中,我可以看到填充了的行,但未显示它们。
问题内容: 如何用对象类型的列表中的值填充JTable。我的代码如下所示: 我已经有了列,列表将来自schedule变量?考虑这些列,如何将其放到表中? 问题答案: 看一下DefaultTableModel。您可以遍历List并为每一行创建Object数组。
我有worker从resultset填充jtable,如下所示; 但所有列都是字符串。DB的“Isactive”列有点只有“1”或“0”Jtable显示该列为“true”或“false”,我需要在Jtable中编辑最后一列typr来boelan。我怎么做?
TableModelListener为侦听TableModel中更改的对象定义接口。 TableModelListener
我制作了一个显示数据库的GUI JTable。我在尺寸上有一个问题。 如何使JTable的列填充JScrollPane?例如,如果一个表中有很多列,那么它只需保持它们的默认大小并让它们滚动。 如果SQL JTable确实需要滚动,那么我只想让它保持这样,这样它就需要滚动。 这是我制作JTable的代码: