2017-04-07 100 views
-2

我已经从数据库填充了JTable。但桌子没有出现。我无法弄清代码的问题。我无法理解问题是布局还是代码块从数据库中检索数据。此外,我没有收到任何异常消息。我在代码中添加了frame.getContentPane().add(scroll, BorderLayout.CENTER);,仍然无法使用表格。请看附件图片我得到。 enter image description here尽管从数据库填充了JTable,但不会显示

import java.awt.EventQueue; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 

import java.awt.BorderLayout; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

import controller.DB_con; 

public class Jtable { 

    private JFrame frame; 
    private JTable table; 
    String[] columnNames = {"ID", "name", "username", "contact", "GENDER"}; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Jtable window = new Jtable(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
        System.out.println(e.toString()); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public Jtable() { 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(new BorderLayout(0, 0)); 

     table = new JTable(); 
     frame.getContentPane().add(table, BorderLayout.CENTER); 
     DefaultTableModel model = new DefaultTableModel(); 
     model.setColumnIdentifiers(columnNames); 

     table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 
     table.setFillsViewportHeight(true); 
     JScrollPane scroll = new JScrollPane(table); 
     frame.getContentPane().add(scroll, BorderLayout.CENTER); 
     scroll.setHorizontalScrollBarPolicy(
     JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     scroll.setVerticalScrollBarPolicy(
     JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 

     try 
     { 
      Connection sqlCon = DB_con.getSQLConnection(); 
      PreparedStatement ps = sqlCon.prepareStatement("select id,name,username,contact,gender from temp_tbl"); 

      int i = 0; 
      ResultSet rs = ps.executeQuery(); 
      while(rs.next()) 
      { 
       String id = rs.getString("id"); 
       String name = rs.getString("name"); 
       String username = rs.getString("username"); 
       String contact = rs.getString("contact"); 
       String gender = rs.getString("gender"); 
       model.addRow(new Object[]{id, name, username, contact, gender}); 
       i++; 
      } 
     } 
     catch(Exception ex) 
     { 
      System.out.println(ex.toString()); 
     } 

    } 

} 
+0

(1)crossposted:https://coderanch.com/t/678176/的Java /填充-JTable的数据库值。退出交叉发布。它讨厌花时间回答一个问题,只是为了发现它已经在另一个论坛上得到了回答。 – camickr

回答

2

您添加JTable到的图像,然后将其添加到JScrollPane但从未添加JScrollPane到什么...

一个组件只能属于一个容器内,所以当你做JScrollPane scroll = new JScrollPane(table);,你从框架中删除JTable

添加frame.getContentPane().add(scroll, BorderLayout.CENTER);你所创建的JScrollPane

后,也从未应用TableModelJTable

table.setModel(model); 
frame.getContentPane().add(scroll, BorderLayout.CENTER); 
+0

我已经按照您的建议添加了代码,但仍未获取表格。请帮忙!!! – nischalinn

+0

实际上,它确实有效,但是你永远不会将'TableModel'应用到'JTable',所以它显示一个空表 – MadProgrammer