JTable没有显示输出

时间:2011-07-01 18:49:05

标签: java swing jdbc jtable

这是我的代码:

private void show(java.awt.event.ActionEvent evt) {
    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "phone";
    String driver = "com.mysql.jdbc.Driver";
    String userName = "root";
    String password = "school";
    try {
        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url + dbName, userName, password);
        PreparedStatement pStmt = conn.prepareStatement("SELECT * FROM contacts");
        ResultSet rs = pStmt.executeQuery();
        JFrame frame1 = new JFrame();
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame1.setSize(300, 150);
        frame1.setVisible(true);
        while (rs.next() == true) {

            Object rowData[][] = {{"Name"},
                {"Phone"}};
            Object columnNames[] = {"Column One", "Column Two"};
            JTable table = new JTable(rowData, columnNames);
            JScrollPane scrollPane = new JScrollPane(table);
            frame1.add(scrollPane, BorderLayout.CENTER);


        }
        rs.close();
        pStmt.close();
        conn.close();
    } catch (Exception ex) {
        System.out.println(ex);
    }
}

我想在单独的窗口中显示记录,但显示空白屏幕。有任何更正建议吗?

4 个答案:

答案 0 :(得分:1)

            Vector columnNames = new Vector();
            Vector data = new Vector();                 
            try{
            Connection conn = null;
            DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
            conn = DriverManager.getConnection(
            "jdbc:oracle:thin:@localhost:1521:XE","yedal ","yedal121288");
            Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("");            
                ResultSetMetaData meta=rs.getMetaData();                
                int columns = meta.getColumnCount();
                for (int i = 1; i <= columns; i++) 
                {
                    columnNames.addElement( meta.getColumnName(i) );
                }
                while (rs.next()) 
                { 
                    Vector row = new Vector(columns);
                    for (int i = 1; i <= columns; i++)
                    {
                        row.addElement( rs.getObject(i) );
                    }   
                    data.addElement( row );
                }
                rs.close();
                stmt.close();
                } 
             catch (SQLException ex) { 
                ex.printStackTrace(); 
                } 
             t= new JTable(data, columnNames); t.setVisible(true);             
             TableColumn col; 
             for (int i = 0; i < t.getColumnCount(); i++) 
             {
                 col = t.getColumnModel().getColumn(i);
                 col.setMaxWidth(200);
             } 
             JScrollPane scrollPane = new JScrollPane(t);

答案 1 :(得分:0)

你在while循环中创建了多个JTable,我认为这不是你想要做的,也不是你给它们的大小。您必须使用setPreferredSize或setSize方法设置JTable的大小:

tblObj.setPreferredSize(new Dimension(300,400));

你也可以为表内容传递true到setFillsViewportHeight方法以填充视口。

以下是有关如何使用JTable的链接:

How To Use JTable

答案 2 :(得分:0)

如果您查看控制台,我认为您会看到异常java.lang.ArrayIndexOutOfBoundsExceptionJTable填充了一个包含两列的表模型,但是您使用一个只有一个数据的数组构建它。

请注意,因为在此异常发生之前将框架设置为可见,所以显示框架,组件被添加到框架中,但是当swing尝试绘制它时,它将失败。

如果您将测试数据替换为例如

Object rowData[][] = { { "Name", "Phone" }, { "Name2", "Phone2" } };

它会起作用(除非rs.next()永远不变)。

答案 3 :(得分:0)

最好使用库文件rs2xml.jar。 将它包含在你的库中

首先使用jdbc创建与数据库的连接。 导入此 - &gt; import net.proteanit.sql.DbUtils;

 String query ="select * from employee"; //let
 pst = conn.prepareStatement(query);

  rs = pst.executeQuery();
  s.append (QueryArea.getText()).append("\n");
  jTable.setModel(DbUtils.resultSetToTableModel(rs));

将抛出异常,因此请通过try catch语句处理它。 如果你有任何问题可以问。