2012-12-18 68 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