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