Ładowanie Java JTable: Dlaczego to nie działa?

Stworzyłem prosty GUI, który zawiera JTable. Tę tabelę można zapisać i załadować za pomocą odpowiedniego strumienia obiektów.

W tym momencie funkcja Zapisz działa zgodnie z przeznaczeniem i widzę, że obiekt tabeli jest przechowywany w pliku podczas przeglądania katalogu składowania.

Jednak gdy próbuję załadować tabelę z pliku, GUI nigdy nie wyświetla załadowanej tabeli. Wywoływana jest funkcja actionlistener, ponieważ mam system.out „Dane załadowane”, ale tabela nigdy nie wyświetla zaktualizowanych danych.

Próbowałem nazwać przemalowanie (), ale bezskutecznie. Byłbym wdzięczny każdemu, kto może rzucić trochę światła na to, co robię źle.

Spojrzenie na jakiś kod

import javax.swing.*;
import java.awt.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.imageio.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.util.*;
import javax.swing.table.*;
import java.awt.event.*;


public class Save3 extends JFrame implements ActionListener{

public int PADDING = 10;

public JMenuItem menuNew;
public JMenuItem menuOpen;
public JMenuItem menuSave;
public JMenuItem menuExit;

public JPanel       container;

public DefaultTableModel    model;
public JScrollPane          scrollPane;
public JTable               table;

public FileInputStream      fis;
public ObjectInputStream    in;
public FileOutputStream     fos;
public ObjectOutputStream   out;
public String               filename;


public Save3(){
    fis         = null;
    in          = null;
    fos         = null;
    out         = null;
    filename    = "test.ref";
    initGUI();
}

public void initGUI(){
    setTitle("WIM Reference Data Comparison Tool");
    setSize(500, 400);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);

    // Menu Bar and Menu Items setup
    JMenuBar    menuBar;
    JMenu       menu;
    JMenuItem   menuItem;

    menuBar = new JMenuBar();
    menu = new JMenu("Menu");
    menuBar.add(menu);

    menuNew     = new JMenuItem("New");
    menuOpen    = new JMenuItem("Open");
    menuSave    = new JMenuItem("Save");
    menuExit    = new JMenuItem("Exit");

    menuNew.addActionListener(this);
    menuOpen.addActionListener(this);
    menuSave.addActionListener(this);
    menuExit.addActionListener(this);

    menu.add(menuNew);
    menu.add(menuOpen);
    menu.add(menuSave);
    menu.add(menuExit);
    setJMenuBar(menuBar);               


    container       = new JPanel(new BorderLayout());

    String[] columnNames = {"", "MotorBike", " Car"}; 
    Object[][] data = { {"Vehicle Summary", new Integer(100), new Integer(200)},  // Header 1: Green
                        {"Axle Numbers", new Integer(100), new Integer(200)},
                        {"Axle Code", new Integer(100), new Integer(200)},
                        {"Axle Distances (cm)", new Integer(100), new Integer(200)},
                        {"Vehicle Speed (km/h)", new Integer(100), new Integer(200)},
                        {"Gross Weight", new Integer(100), new Integer(200)}, 
                        {"Axle Weight 1", new Integer(100), new Integer(200)},
                        {"Axle Weight 2", new Integer(100), new Integer(200)},
                        };

    model = new DefaultTableModel(data, columnNames);
    table = new JTable(data, columnNames);
    table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
    table.setFillsViewportHeight(true); 
    scrollPane = new JScrollPane(table); 


    container.add(scrollPane, BorderLayout.CENTER);
    add(container);
}



public void setPanel(JTable table){

    scrollPane.remove(table);
    container.remove(scrollPane);

    scrollPane  = new JScrollPane(table); 
    container.add(scrollPane, BorderLayout.CENTER);

    repaint();
}

public void actionPerformed(ActionEvent e){
    System.out.println("Clicked item!");
    // NEW
    if(e.getSource() == menuNew){
        System.out.println("New File");
    }
    // SAVE
    if(e.getSource() == menuSave){
        System.out.println("Save!");
        try{
            model.fireTableDataChanged();               
            table = new JTable(model);
            fos     = new FileOutputStream(filename);
            out     = new ObjectOutputStream(fos);
            out.writeObject(table);
        }catch(IOException e3){
            e3.printStackTrace();
        }
    }
    if(e.getSource() == menuOpen){
        System.out.println("Open!");

        JTable table = new JTable();
        try{
            fis     = new FileInputStream(filename);
            in      = new ObjectInputStream(fis);

            table   = new JTable();
            table   = (JTable) in.readObject();
            in.close(); 

            setPanel(table);

            System.out.println("data loaded");

        }catch(IOException e1){
            e1.printStackTrace();
        }catch(ClassNotFoundException e2){
            e2.printStackTrace();
        }
    }
    if(e.getSource() == menuExit){
        System.out.println("Exit!");
    }
}



   public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

        public void run() {

            try {
                UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
            } catch (Exception e) {
                e.printStackTrace();
            }

            Save3 ex = new Save3();
            ex.setVisible(true);
        }
    });
}

}

questionAnswers(3)

yourAnswerToTheQuestion