JTabbedPane 更改侦听器以从文件中读取

JTabbedPane change listener to read from file

我有一个包含 7 个选项卡的 JTabbedPane 每个选项卡包含一个 class 扩展 JPanel, 我需要的是,如果我在任何选项卡中进行更改并保存到文件中,所做的更改可以在其他选项卡中使用而无需关闭程序并再次 运行

我将选项卡添加到 JTabbedPane

tp.addTab("   Etudiant   ", new Etudiant());
            tp.addTab("   Enseignant   ", new Enseignant());
            tp.addTab("   Cours   ", new Cours());
            tp.addTab("   Groupes   ", new Groupe());
            tp.addTab("   Inscription   ", new Inscription());
            tp.addTab("   Horaires   ", new Horaires());
            tp.addTab("   Resultats   ", new Resultats());
            tp.addTab("   Divers   ", new Divers());

然后我创建了一个更改侦听器,每次我选择一个选项卡时都从文件中读取, 我需要使用从 class(每个选项卡的)

中的文件中读取的 ArrayList
tp.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                switch (tp.getSelectedIndex()) {
                    case 3:

                        if (file3.length() > 0) {
                            try {
                                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Cours.out"));
                                listCours = (ArrayList) ois.readObject();

                                System.out.println("cours read");
                                System.out.println(listCours);
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        } else {
                            listCours = new ArrayList();
                        }
                        if (file4.length() > 0) {
                            try {
                                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Inscriptions.out"));
                                listIns = (ArrayList) ois.readObject();

                                System.out.println("insc read");
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        } else {
                            listIns = new ArrayList();
                        }

                        break;

                    case 4:

                        if (file.length() > 0) {
                            try {
                                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Etudiants.out"));
                                listEtud = (ArrayList) ois.readObject();

                                System.out.println("etud read");
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        } else {
                            listEtud = new ArrayList();
                        }
                        if (file2.length() > 0) {
                            try {
                                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Groupes.out"));
                                listGroupes = (ArrayList) ois.readObject();

                                System.out.println("group read");
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        } else {
                            listGroupes = new ArrayList();
                        }
                        if (file3.length() > 0) {
                            try {
                                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Cours.out"));
                                listCours = (ArrayList) ois.readObject();

                                System.out.println("cours read");
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        } else {
                            listCours = new ArrayList();
                        }
                        break;
                    case 5:
                        break;

                    case 6:

                        break;

                    default:
                        break;
                }
            }
        });

ChangeListener 没有责任决定在选择选项卡时应该做什么。相反,您需要一些方法来指示所选选项卡在被选中时应执行所需的任何操作。这分离了代码并允许您更改选项卡的顺序而不影响其余代码。

首先定义一个可加载的简单概念...

public interface Loadable {
    public void load();
}

然后每个 tab/panel 您希望在选项卡选择更改时收到通知应该实施此 interface

public class LoadableTabPane extends JPanel implements Loadabel {
    //...
    public void load() {
        // Performing the loading here
    }
}

Then when the tab selection changes, you inspect the selected component to determine of it's an instanceof Loadable and if it is, you cast it and call its load method. ..

tp.addChangeListener(new ChangeListener() {
    @Override
    public void stateChanged(ChangeEvent e) {
        Component selectedComponent = tp.getSelectedComponent();
        if (selectedComponent instanceof Loadable) {
            ((Loadable)selectedComponent).load();
        }
    }
}