有什么问题?无法从静态上下文引用非静态变量数据。我想从.dat文件加载数据,但我不知道怎么办呢?我尝试过,但由于之前的错误消息,它无法正常工作。谢谢你的帮助。
public class StudentFrame extends JFrame {
private StudentData data;
private static String[] columnNames = {"A","B","C","D"};
private void initComponents() {
this.setLayout(new BorderLayout());
}
@SuppressWarnings("unchecked")
public StudentFrame() {
super("Hallgatói nyilvántartás");
setDefaultCloseOperation(EXIT_ON_CLOSE);
try {
data = new StudentData();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("students.dat"));
data.students = (List<Student>)ois.readObject();
ois.close();
} catch(Exception ex) {
ex.printStackTrace();
}
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("students.dat"));
oos.writeObject(data.students);
oos.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
});
setMinimumSize(new Dimension(500, 200));
initComponents();
}
public static void main(String[] args) {
StudentFrame sf = new StudentFrame();
sf.setVisible(true);
sf.setLayout(new BorderLayout());
JTable table = new JTable(data,columnNames);//PROBLEM
table.setFillsViewportHeight(true);
/*Jscroll...*/
scrollPane.setViewportView(table);
sf.add(table.getTableHeader(), BorderLayout.PAGE_START);
sf.add(table, BorderLayout.CENTER);
sf.add(scrollPane, BorderLayout.LINE_END);
sf.setVisible(true);
}
}
答案 0 :(得分:0)
建议重构代码并将main方法的内容移动到StudentFrame类中。没有真正的理由使用静态变量,使TableData成为StudentFrame的成员变量。仅从main方法实例化StudentFrame,设置框架并显示它。如何显示内容应该是StudentFrame类的一部分。
columnNames可以作为静态,因为它是常量。
答案 1 :(得分:0)
您的StudentFrame私有成员变量需要公共访问者,然后您将在main中引用它们JTable table = new JTable(sf.getData(), StudentFrame.getColumnNames());