В настоящее время я создаю или пытаюсь создать графический интерфейс для моего проекта. Теперь мне нужно сделать JTable, который считывает данные из LinkedList. Для этого у меня есть пользовательский метод TableAbstractModel.GUI Не работает с пользовательским AbstractTableModel. Ошибки «Неизвестный источник»
public class StudentTableModel extends AbstractTableModel {
public static final String[] columnNames = { "ID", "First Name",
"Last Name" };
private LinkedList<Student> data;
public StudentTableModel(LinkedList<Student> data) {
this.data = data;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Student student = data.get(rowIndex);
if (student == null) {
return null;
}
switch (columnIndex) {
case 0:
return student.getID();
case 1:
return student.getFirstname();
case 2:
return student.getLastname();
default:
return null;
}
}
}
Теперь я пытаюсь построить очень простой макет, состоящий только из таблицы, а соответствующее JTextFields и JButtons, чтобы проверить, если таблица на самом деле работает.
public class GUI extends JFrame {
private JTextField StudentID;
private JTextField Firstname;
private JTextField Lastname;
private JTextField Group;
private JButton Add;
private static Database DB; // << Does this have to be static? Eclipse tells me it needs to be, but I am not sure.
private JTable StudentTable;
public GUI(Database DB) {
super("Theatre Management");
setExtendedState(JFrame.MAXIMIZED_BOTH);
this.DB = DB;
LinkedList<Student> data = null;
setLayout(new FlowLayout());
StudentID = new JTextField("Enter Student ID", 10);
Firstname = new JTextField("Enter First Name");
Lastname = new JTextField("Enter Last Name");
Group = new JTextField("Enter Group ID");
Add = new JButton("Add Student");
StudentTable = new JTable();
StudentTable.setModel(new StudentTableModel(data));
JScrollPane scrollPane = new JScrollPane(StudentTable);
StudentTable.setFillsViewportHeight(true);
add(StudentTable);
add(StudentID);
add(Firstname);
add(Lastname);
add(Group);
add(Add);
add(scrollPane);
addStudentEvent add = new addStudentEvent();
Add.addActionListener(add);
}
public static void createAndShow() {
GUI Database = new GUI(DB);
Database.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Database.setVisible(true);
}
public static void main(String[] args) {
GUI.createAndShow();
}
private class addStudentEvent implements ActionListener {
public void actionPerformed(ActionEvent event) {
int G = Integer.parseInt(Group.getText());
int ID = Integer.parseInt(StudentID.getText());
String First = Firstname.getText();
String Last = Lastname.getText();
DB.getGroup(G).addStudent(ID, First, Last);
DB.addStudent(ID, First, Last);
}
}
}
Теперь проблема, как только я пытаюсь запустить GUI, я просто получить целую кучу ошибок.
Exception in thread "main" java.lang.NullPointerException
at theatremanagement.StudentTableModel.getRowCount(StudentTableModel.java:29)
at javax.swing.JTable.getRowCount(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.createTableSize(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at java.awt.FlowLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at java.awt.Container.validateUnconditionally(Unknown Source)
at java.awt.Window.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at theatremanagement.GUI.createAndShow(GUI.java:59)
at theatremanagement.GUI.main(GUI.java:64)
Я действительно застрял прямо сейчас и понятия не имею, как это исправить. Если кто-нибудь может показать мне, что я делаю неправильно, это было бы здорово. С другой стороны, мне нужно LinkedList в моей программе, в разных классах. Как TableModel знает, какой из них я хочу? Нужно ли добавлять что-либо в TableModel, чтобы автоматически обновлять таблицу сразу после добавления или удаления ученика?
Update:
private JTable setStudentList(LinkedList<Student> Studentlist) {
JTable StudentTable = new JTable();
StudentTable.setModel(new StudentTableModel(Studentlist));
JScrollPane scrollPane = new JScrollPane(StudentTable);
StudentTable.setFillsViewportHeight(true);
return StudentTable;
ли этот метод работы, чтобы создать таблицу с связанного списка? Разве я тогда призыв к методу,
setStudentList(Studentlist);
Если я инициализирован пустой LinkedList как таковой:
LinkedList<Student> StudentList = new LinkedList<Student>();
Спасибо за помощь.
Ой, спасибо. Итак, как именно я его инициализирую? Что бы я ему задал? Я действительно не знаю в данный момент ... – Nino
Ну, я бы предположил, что «LinkedList data = new LinkedList ();' будет достаточно. –
MadProgrammer
Забудьте об этом, я знаю, что вы имеете в виду, просто немного устал, D Спасибо! Можете ли вы рассказать мне что-нибудь по другим вопросам? – Nino