Заголовки столбцов Java JTable не отображаются
Привет, ребята, надеялись, что вы мне поможете, мой код (по логике) хорош, единственная проблема в том, что заголовки столбцов не отображаются в 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);
}
}
2 ответа
Здесь проблема.
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)).
Это сработало.