Java JTabbedPane将侦听器更改为从文件读取

Java JTabbedPane将侦听器更改为从文件读取,java,swing,jtabbedpane,Java,Swing,Jtabbedpane,我有一个包含7个选项卡的JTabbedPane 每个选项卡都包含一个扩展JPanel的类, 我需要的是,如果我在任何选项卡中更改并保存到文件中,所做的更改可以在其他选项卡中使用,而无需关闭程序并再次运行它 我将选项卡添加到JTabbedPane tp.addTab(" Etudiant ", new Etudiant()); tp.addTab(" Enseignant ", new Enseignant()); tp.addTab

我有一个包含7个选项卡的JTabbedPane 每个选项卡都包含一个扩展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());
然后我创建了一个更改侦听器,每次选择选项卡时都从文件中读取, 我需要使用从类中(每个选项卡的)文件读取的ArrayList


当选择选项卡时,
ChangeListener
不负责决定应该做什么。相反,您需要某种方法来指示所选选项卡,使其在选中时执行所需的任何操作。这将解耦代码,并允许您更改选项卡的顺序,而不影响其余代码

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

public interface Loadable {
    public void load();
}
然后,您希望在选项卡选择更改时收到通知的每个选项卡/面板都应实现此
界面

public class LoadableTabPane extends JPanel implements Loadabel {
    //...
    public void load() {
        // Performing the loading here
    }
}
然后,当选项卡选择更改时,您检查所选组件以确定其是否为可加载的
实例,如果是,则将其强制转换并调用其
加载
方法

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

好的,首先,我将定义一个接口来执行保存和加载操作,这样您就不需要在ChangeListener中执行,将责任转移到面板本身。接下来,您需要知道之前选择了哪个选项卡,您可以通过ChangeListener本身来执行此操作,因此当您到达方法末尾时,您可以将“previous”选项卡设置为“current” tab@MadProgrammer你能给我看一个简单的例子和代码吗?我花了太多的时间没有result@MadProgrammer我不明白为什么我需要“上一页”和“当前页”选项卡
tp.addChangeListener(new ChangeListener() {
    @Override
    public void stateChanged(ChangeEvent e) {
        Component selectedComponent = tp.getSelectedComponent();
        if (selectedComponent instanceof Loadable) {
            ((Loadable)selectedComponent).load();
        }
    }
}