簡體   English   中英

Java JTable 列標題未顯示

[英]Java JTable Column headers not showing

我的代碼(邏輯方面)都很好,唯一的問題是列標題沒有出現在 2 個表(表和表 S,一個用於教師,一個用於學生詳細信息)中。 我如何讓它們顯示?

        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);

    }

}

這是問題所在。

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 屬性。 當此屬性為 true 時,表格會使用容器的整個高度,即使表格沒有足夠的行來使用整個垂直空間。 這樣可以更輕松地將表格用作拖放目標。 滾動窗格會自動將表標題放置在視口的頂部。 滾動表數據時,列名在查看區域的頂部仍然可見。

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

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

如果我沒記錯的話,你應該在它周圍放一個容器(例如JScrollPane )。

我的問題是我將JFrame布局設置為null (f.setLayout(null)) 所以當我刪除它並添加

f.add(new JScrollPane(table)). 

有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM