大家好希望你可以帮助我,我的代码(逻辑方面)很好唯一的问题是列标题没有显示在2个表格中(表格和表格,一个用于教师和一个表格)对于学生的详细信息)我如何让它们显示?
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 :(得分:17)
这是问题所在。
JTable table = new JTable (data, columnNames);
f.add(table);
不要直接添加表格。使用JScrollPane
显示表格标题。
f.add(new JScrollPane(table))
为什么需要将表格放在JScrollPane
?
来自@Dan帖子:
当您将组件放在
JScrollPane
的构造函数中时,您会提到要应用滚动的视图。另一方面,使用add方法,只需将一个组件添加到容器中,就像将其添加到
JPanel
一样。这样,您就不会指定要添加滚动条的组件。
修改强> 来自javadoc(评论部分中的trashgod引用)
以下是创建用作a的滚动窗格的典型代码 桌子的容器:
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);
答案 1 :(得分:4)
如果我没记错的话,你应该放一个容器(例如JScrollPane
)。
答案 2 :(得分:0)
我的问题是我将JFrame
的布局设置为null
(f.setLayout(null))
。所以当我删除并添加
f.add(new JScrollPane(table)).
有效。