現在作成中、またはプロジェクトの GUI を作成しようとしています。ここで行う必要があるのは、LinkedList からデータを読み取る JTable を作成することです。このためのカスタム TableAbstractModel があります。
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 に何かを追加する必要がありますか?
アップデート:
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>();
助けてくれてありがとう。