JTable,数据,非静态方法

时间:2016-11-04 19:52:28

标签: java jtable

有什么问题?无法从静态上下文引用非静态变量数据。我想从.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);

        }
    }

2 个答案:

答案 0 :(得分:0)

建议重构代码并将main方法的内容移动到StudentFrame类中。没有真正的理由使用静态变量,使TableData成为StudentFrame的成员变量。仅从main方法实例化StudentFrame,设置框架并显示它。如何显示内容应该是StudentFrame类的一部分。

columnNames可以作为静态,因为它是常量。

答案 1 :(得分:0)

您的StudentFrame私有成员变量需要公共访问者,然后您将在main中引用它们JTable table = new JTable(sf.getData(), StudentFrame.getColumnNames());