Java JTable,数据,非静态方法
有什么问题吗?无法从静态上下文引用非静态变量数据。我想从.dat文件加载数据,但我不知道如何才能这样做?我试过了,但由于前面的错误消息,它不起作用。谢谢你的帮助Java JTable,数据,非静态方法,java,jtable,Java,Jtable,有什么问题吗?无法从静态上下文引用非静态变量数据。我想从.dat文件加载数据,但我不知道如何才能这样做?我试过了,但由于前面的错误消息,它不起作用。谢谢你的帮助 public class StudentFrame extends JFrame { private StudentData data; private static String[] columnNames = {"A","B","C","D"}; private void initComponen
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);
}
}
公共类StudentFrame扩展了JFrame{
私人学生数据;
私有静态字符串[]columnNames={“A”、“B”、“C”、“D”};
私有组件(){
此.setLayout(新的BorderLayout());
}
@抑制警告(“未选中”)
公共学生框架(){
超级(“Hallgatói nyilvántartás”);
setDefaultCloseOperation(关闭时退出);
试一试{
数据=新学生数据();
ObjectInputStream ois=新ObjectInputStream(新文件InputStream(“students.dat”));
data.students=(List)ois.readObject();
ois.close();
}捕获(例外情况除外){
例如printStackTrace();
}
addWindowListener(新的WindowAdapter(){
@凌驾
公共无效窗口关闭(WindowEvent e){
试一试{
ObjectOutputStream oos=新的ObjectOutputStream(新文件OutputStream(“students.dat”);
oos.writeObject(data.students);
oos.close();
}捕获(例外情况除外){
例如printStackTrace();
}
}
});
设置最小尺寸(新尺寸(500200));
初始化组件();
}
公共静态void main(字符串[]args){
StudentFrame sf=新StudentFrame();
sf.setVisible(真);
sf.setLayout(新的BorderLayout());
JTable table=新的JTable(数据、列名);//问题
表.setFillsViewPerthweight(真);
/*杰克罗尔*/
scrollPane.setViewportView(表);
添加(table.getTableHeader(),BorderLayout.PAGE_START);
sf.add(表格、边框布局、中心);
添加(滚动窗格,边框布局,线条结束);
sf.setVisible(真);
}
}
建议重新构造代码,并将主方法的内容移动到StudentFrame类中。没有真正的理由使用静态变量,让TableData成为StudentFrame的成员变量。仅从main方法实例化StudentFrame,设置框架并显示它。内容的显示方式应该是StudentFrame类的一部分
columnNames可以作为一个静态变量,因为它是一个常量。您的StudentFrame私有成员变量需要公共访问器,然后您可以在main中将它们引用为
JTable table=new JTable(sf.getData(),StudentFrame.getColumnNames())代码>Try:私有静态学生数据;代替:私人学生数据;请格式化您的问题,明确您在哪一行遇到的编译器错误。还要检查——更好的问题往往会得到更好的答案。