即使在用 JScrollPane 包装 table 后,列 header 也不会显示

Column header do not show up even after wrapping the table with JScrollPane

这是 Display database table with swing

的后续问题

我将 table 包装到 JScrollPane,但列的 headers 仍然没有显示!

谁能告诉我哪里出了问题?

try {
    con = (Connection) DriverManager.getConnection(DATABASE_URL , USERNAME, PASSWORD);
    stmt = (Statement) con.createStatement();
    ResultSet rs = stmt.executeQuery(QUERY_FIND_ITEMS);

        {
    ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
    int columns = md.getColumnCount();

    //  Get column names
    for (int i = 1; i <= columns; i++)
    {
        columnNames.add( md.getColumnName(i) );
    }

    //  Get row data
    while (rs.next())
    {
        ArrayList row = new ArrayList(columns);

        for (int i = 1; i <= columns; i++)
        {
            row.add( rs.getObject(i) );
        }

        data.add( row );
    }
}
}   
catch (SQLException e)
{
    System.out.println( e.getMessage() );
}

Vector<String> columnNamesVector = new Vector();
Vector dataVector = new Vector();

for (int i = 0; i < data.size(); i++)
{
    ArrayList subArray = (ArrayList)data.get(i);
    Vector subVector = new Vector();

    for (int j = 0; j < subArray.size(); j++)
    {
        subVector.add(subArray.get(j));
    }
    dataVector.add(subVector);
}

for (int i = 0; i < columnNames.size(); i++ ) {
    columnNamesVector.add(columnNames.get(i));
}
//  Create table with database data    
JTable table = new JTable(dataVector, columnNamesVector)
{
    public Class getColumnClass(int column)
    {

        for (int row = 0; row < getRowCount(); row++)
        {
            Object o = getValueAt(row, column);

            if (o != null)
            {
                return o.getClass();
            }
        }


        return Object.class;
    }
};


          JScrollPane scrollPane =new JScrollPane(table);
            getContentPane().add( scrollPane, BorderLayout.WEST );

            JPanel buttonPanel = new JPanel();
            getContentPane().add( buttonPanel, BorderLayout.SOUTH );

            table.setForeground(Color.BLUE);
catch (SQLException e)
{
    System.out.println( e.getMessage() );
}

如果数据库查询失败,catch 块结束后的代码将无法正常工作。最好将该代码包含在 try 块中。

还有一个提示:更改

System.out.println( e.getMessage() ); 

e.printStackTrace(); 

两者都更短 & 更多信息。