Java JTable列标题未显示

嗨伙计们希望你能在这里帮助我,我的代码(逻辑方面)很好唯一的问题是列标题没有显示在2个表格中(表格和表格,一个用于教师,一个用于学生详细信息) )我怎么让他们表演?

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; public class Display { ArrayList stud1 = new ArrayList(); ArrayList sTeach1 = new ArrayList(); //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); } } 

这是问题所在。

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

不要直接添加表。 使用JScrollPane显示表头。

 f.add(new JScrollPane(table)) 

为什么需要将表放在JScrollPane

来自@Danpost:

当您将组件放在JScrollPane的构造函数中时,您可以提到要应用滚动的视图。

另一方面,使用add方法,只需将一个组件添加到容器中,就像将其添加到JPanel 。 这样,您不需要指定要添加滚动条的组件。

编辑:来自javadoc (在评论部分由trashgod引用)

以下是创建用作表的容器的滚动窗格的典型代码:

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

此代码段中的两行执行以下操作:使用引用表对象的参数调用JScrollPane构造函数。 这会创建一个滚动窗格作为表的容器; 该表自动添加到容器中。 调用JTable.setFillsViewportHeight来设置fillsViewportHeight属性。 当此属性为true时,表使用容器的整个高度,即使表没有足够的行来使用整个垂直空间。 这样可以更轻松地将表用作拖放目标。 滚动窗格自动将表头放置在视口的顶部。 滚动表数据时,列名称在查看区域的顶部仍然可见。

如果您使用的是没有滚动窗格的表,则必须获取表头组件并自行放置。 例如:

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

如果我没记错的话,你应该在它周围放一个容器(例如JScrollPane )。