当前位置: 首页 > 知识库问答 >
问题:

当我使用DefaultTableModel从CachedRowSet填充jTable时,为什么jTable的列标题没有更新?

越宣
2023-03-14

这是客户

 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);
        }

共有1个答案

池照
2023-03-14

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的代码: