2012-12-18 70 views
3

嗨,大家都希望你能幫助我在這裏,我的代碼(邏輯明智)是好的唯一的問題是列標題不出現在2表(表和表,一個是老師,另一個是學生的詳細信息)我如何讓他們展示?Java JTable列標題不顯示

 import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.util.*; 


public class Display 
{ 
    ArrayList<Student> stud1 = new ArrayList<Student>(); 
    ArrayList<SubjectTeacher> sTeach1 = new ArrayList<SubjectTeacher>(); 

    //For Display Teachers 
    private JTable table; 
    private JFrame f; 
    private int i; 

    //For DisplayStudents 
    private JTable tableS; 
    private JFrame fS; 
    private int iS; 


    //Displays Teachers 
    public void displayTeachers() 
    { 

      f = new JFrame("Teachers"); 

      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.setSize(500,400); 
      f.setVisible(true); 



     String[] columnNames = {"Name", "Surname", "ID", "Pay", "Subject"}; 

     sTeach1 = Stores.getTeach(); 
     i = sTeach1.size(); 


     Object[][] data = new Object[i+1][5]; 



      for (int j = 0; j<sTeach1.size(); j++) 
      { 
       { 
        SubjectTeacher myTeach = sTeach1.get(j); 
        data[j][0] = myTeach.getName(); 
        data[j][1] = myTeach.getSurname(); 
        data[j][2] = myTeach.getID(); 
        data[j][3] = myTeach.getPay(); 
        data[j][4] = myTeach.getSubjectID(); 
       }; 
      } 




    JTable table = new JTable (data, columnNames); 
    f.add(table); 

    } 



    //Displays Students 
    public void displayStudents() 
    { 

     System.out.println(stud1.size()); 

      fS = new JFrame("Students"); 

      fS.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      fS.setSize(700,600); 
      fS.setVisible(true); 



     String[] colNames = {"Name", "Surname", "ID", "Computer", "Physics", "Maths", "Tests", "Passes", "Fails"}; 


     stud1 = Stores.getStud(); 
     iS = stud1.size(); 

     Object[][] info = new Object[iS+1][9]; 




     for (int j = 0; j<stud1.size(); j++) 
      { 
       { 


        Student myStud = stud1.get(j); 

       info[j][0] = myStud.getName(); 
       info[j][1] = myStud.getSurname(); 
       info[j][2] = myStud.getID(); 
       info[j][3] = myStud.getSubject(1); 
       info[j][4] = myStud.getSubject(2); 
       info[j][5] = myStud.getSubject(3); 
       info[j][6] = myStud.getTestsTaken(); 
       info[j][7] = myStud.getPasses(); 
       info[j][8] = myStud.getFails(); 
       }; 
      } 




    JTable tableS = new JTable (info, colNames); 
    fS.add(tableS); 

    } 

} 
+0

可能的複製[JTable中不會顯示列標題](HTTP://計算器。com/questions/2320812/jtable-wont-show-column-headers) – Suma

回答

4

如果我沒有記錯,你應該在其周圍放置一個容器(例如JScrollPane)。

+0

謝謝:)我想我必須學會如何去做xD –

+0

我不確定這是Eclipse還是我使用的插件(Jigloo) ,但我可以右擊表格並選擇「按容器環繞」。這個鏈接應該設置你的方式,無論:http://www.roseindia.net/java/example/java/swing/ScrollableJTable.shtml –

+0

感謝事情即時使用JCreator(沒有幫助或預製圖形),因爲這是對於一個項目 –

15

這是問題所在。

JTable table = new JTable (data, columnNames); 
f.add(table); 

不要直接添加表格。使用JScrollPane顯示錶頭。

f.add(new JScrollPane(table)) 

爲什麼你需要把表格放在JScrollPane

@Dan後:

當你把分量JScrollPane的構造函數中,你提到這是它被應用滾動視圖。

另一方面,使用add方法,您只需將組件添加到容器,例如將其添加到JPanel。這樣,您不指定要添加滾動條的組件。

編輯:javadoc(通過在註釋部分trashgod引用)

下面是用於創建充當用於一個表 容器滾動窗格典型代碼:

JScrollPane scrollPane = new JScrollPane(table); 
table.setFillsViewportHeight(true); 

這兩個這段代碼中的行執行以下操作: JScrollPane構造函數調用的參數引用 表對象。這將創建一個滾動窗格作爲 表的容器;該表會自動添加到容器中。 JTable.setFillsViewportHeight被調用來設置 fillsViewportHeight屬性。當該屬性爲真時,表 使用容器的整個高度,即使該表沒有 有足夠的行來使用整個垂直空間。這使得 更容易使用該表作爲拖放目標。滾動窗格 自動將表標題放置在視口的頂部。滾動 表格數據時, 列名在查看區域頂部保持可見。

如果您使用的表格沒有滾動窗格,那麼您必須獲取 表格標題組件並自行放置。例如:的

container.setLayout(new BorderLayout()); 
container.add(table.getTableHeader(), BorderLayout.PAGE_START); 
container.add(table, BorderLayout.CENTER); 
+2

另請參見[*將表添加到容器*](http://docs.oracle.com/javase/tutorial/ uiswing /組件/ table.html#顯示)。 – trashgod