2014-07-08 70 views
1

我在这段代码中有一点问题。我想显示一个JTable列标题但问题是,column's titles不被显示,作为截图下图为:JTable未显示colums标题

private static final String DB_DRIVER = "oracle.jdbc.driver.OracleDriver"; 
private static final String DB_CONNECTION = "jdbc:oracle:thin:@localhost:1521:DB"; 
private static final String DB_USER = "*******"; 
private static final String DB_PASSWORD = "********"; 
Connection conn = null; 
Statement stmt = null; 
static Vector<Vector<String>> dataJ, dataC, data; 
Vector<String> columnJ, 

public void getCleubJoueurData() { 
    data = new Vector<Vector<String>>(); 
    colum = new Vector<String>(); 
    colum.add("nom"); 
    colum.add("nom_cleub"); 
    colum.add("numero_maillot"); 
    colum.add("nationalite"); 

    String query = "SELECT joueur.NOM,CLEUB.NOM_CLEUB," + 
        "JOUEUR_CLEUB.NUMERO_MAILLOT, joueur.NATIONALITE " + 
        "FROM joueur JOIN JOUEUR_CLEUB ON joueur.ID_J=" + 
        "JOUEUR_CLEUB.ID_J JOIN CLEUB ON JOUEUR_CLEUB.ID_C=CLEUB.ID_C"; 

    try { 
     try { 
      Class.forName(DB_DRIVER); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     conn = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD); 
     stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery(query); 
     while (rs.next()) { 
      Vector<String> vstring = new Vector<String>(); 
      vstring.add(rs.getString("nom")); 
      vstring.add(rs.getString("nom_cleub")); 
      vstring.add(rs.getString("numero_maillot")); 
      vstring.add(rs.getString("nationalite")); 

      data.add(vstring); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } finally { 
     if (stmt != null) { 
      try { 
       stmt.close(); 
      } catch (SQLException ex) { 
      } 
     } 
    } 
} 

public App() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 882, 477); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); 
    tabbedPane.setBackground(Color.WHITE); 
    tabbedPane.setBounds(40, 43, 812, 390); 
    contentPane.add(tabbedPane); 
    JPanel panel = new JPanel(); 
    tabbedPane.addTab("joueurs", null, panel, null); 
    panel.setLayout(null); 

    getJoueurData(); 
    DefaultTableModel mode = new DefaultTableModel(data, column); 

    table = new JTable(model); 
    table.setToolTipText(""); 
    table.setBounds(0, 94, 819, 269); 
    panel.add(table); 

} 
+0

这不是代码给你的错误,或者是这个错字!!!!尽管你传递'new JTable(model)',然后你创建了__colum = new Vector ()__,但是你传递了''new DefaultTableModel(data,column)'',所以你创建'DefaultTableModel'引用时使用名称__mode__。请纠正这些错误,如果他们只是错字,否则提及他们以及某处:-) –

回答

1
  1. 不要使用空布局。 (并且不要设置边界)

  2. 将表包装在JScrollPane中。 JScrollPane将显示标题。如果你不希望使用JScrollPane中,那么你可以得到表的JTableHeader并分别添加它

前:(与JScrollPane的)

JPanel container = new JPanel(); // default FlowLayout 
JScrollPane scrollPane = new JScrollPane(table); 
//container.add(table); // don't add the table, just the JScrollPane 
container.add(scrollPane); 

后期:(不JScrollPane中)

JPanel container = new JPanel(new BorderLayout()); 
container.add(table, BorderLayout.CENTER); 
container.add(table.getTableHeader(), BorderLayout.PAGE_START); 
+0

感谢他的工作问题是在scrollPane和NullLayout,之后,我将布局更改为边界布局,并添加scrollPane conatint表我有它的工作 – mugiwaradz

1

JTable documentation指出您通常希望将JTable与JScrollPane结合使用。如果不是:

JTables通常放置在JScrollPane中。 [...] 请注意,如果您希望 在独立视图(JScrollPane外部)中使用JTable并且想要 显示标题,则可以使用getTableHeader()和 分别显示它

我建议包装在JScrollPane自己:

... 
JScrollPane scrollPane = new JScrollPane(table); 
panel.add(scrollPane); 
... 
+0

谢谢他的工作问题是在scrollPane和NullLayout,之后,我改变了布局到边界布局和添加scrollPane conatint表我有它的工作 – mugiwaradz