Bonsoir à tous.
Tout d'abord désolé si j'ai posté dans la mauvaise rubrique, j'ai pourtant cherché où je devais poser cette question mais il m'a semblé que c'était ici le mieux.
Edit : J'aurai peut-être dû poster dans la partie "Débuter", désolé.
Je suis étudiant en informatique, et je dois développer au cours d'un projet un tableur qui doit se construire dynamiquement à l'aide de "plugins".

J'ai donc dans un premier temps, une méthode main basique qui crée une JFrame (tout aussi basique), et je charge mes classes à l'aide d'un ClassLoader perso.
J'ai également une JMenuBar, dans laquelle je compte répertorier les fonctionnalités de mes plugins.
J'ai une interface "globale" pour mon appli (faite à part), qui dispose d'une méthode start(JFrame frame) où je passe ma frame en paramètre. Jusque là, rien de bien fou.
Dans mon main, je cast mes plugins chargés avec mon interface globale, de manière à exécuter mon start pour chaque plugin (et le démarrer).

Tous mes plugins ont la structure suivante :
- Une interface InterfaceXXX qui hérite l'interface globale de mon projet.
- Une classe PluginXXX où XXX est la fonctionnalité, et qui implémente InterfaceXXX.

J'ai donc un PluginMenu, avec une méthode start, qui est voué à construire dynamiquement mon menu.
J'ai également un PluginTableau qui, comme vous l'aurez deviné, initialise un tableur.
Et enfin un PluginUndoRedo qui, pour faire original, undo/redo mes actions dans mon tableur.
J'ai cité PluginTableau juste pour l'exemple, je ne parlerai que de mon UndoRedo (ou du moins, du code), même si mon problème s'applique à tous mes "plugins".

Actuellement, je crée via le start de mon UndoRedo un menu Edition qui contient deux items Annuler et Rétablir.
J'ai dû faire une méthode qui à partir du JFrame passé en paramètre dans mon start, ajoute le menu (créé à la volée, événements compris) dans ma JMenuBar.

Ma question, c'est comment faire pour créer un joli PluginMenu, qui permette de gérer simplement (mais efficacement) les ajouts de menu, sans le faire à la volée dans chaque plugin nécessitant un menu ?
Je me retourne le cerveau dans tous les sens : utiliser du statique un peu partout, créer une interface IMenuable que mon UndoRedo implemente, etc... Mais au final, je ne sais pas du tout comment m'y prendre pour que mon PluginMenu fasse le travail et que je ne le fasse pas directement dans mon UndoRedo.
Ça fait une bonne semaine que je bûche dessus, mais sans résultat concret...

Un peu de code pour illustrer ma demande :
Code main : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Excel {
	public static JFrame frame;
	public static ArrayList<InterfaceProjet> listInterfaces;
 
	public static void main(String[] args) {
		frame = new JFrame("Excel");
		listInterfaces = new ArrayList<InterfaceProjet>();
		frame.setSize(600, 600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
		// [...] du code qui s'occupe de mes collections et de ma frame
 
		for(InterfaceProjet i : listInterfaces){
			try{
				i.start(frame);
			}
			catch(NoClassDefFoundError e){
				//traitement exception
			}
		}
	}
}
Code Interfaces : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public interface InterfaceProjet {	
	public void start(JFrame frame);
}
 
public interface InterfaceMenu extends InterfaceProjet {}
 
public interface InterfaceUndoRedo extends InterfaceProjet { }
Code PluginMenu : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
public class PluginMenu implements InterfaceMenu {
	@Override
	public void start(JFrame frame) {
		//du joli code qui ferait mon menu
 
		//et pourquoi pas d'autres méthodes qui le feraient d'elles mêmes
	}
}
Code PluginUndoRedo : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public class PluginUndoRedo implements InterfaceUndoRedo {
	@Override
	public void start(JFrame frame) {
		// [...] du code qui paramètre mon UndoManager / TableModel
		initMenu(frame); //Méthode qui créé mon menu et l'ajoute dynamiquement
	}
}

Voilà, désolé pour le pavé, j'ai tenté d'être le plus clair possible sans trop surcharger la situation.

J'ai déjà songé à faire une méthode JMenu getMenu() dans mon interface globale et gérer les menus dans mon main (boucle foreach qui récupère le menu de chaque plugin et l'ajoute), mais je trouvais plus sympa (et plus intéressant en pratique) de le gérer via un seul et même plugin.
J'ai juste un blocage cérébral au niveau des références inter-pluginesques, du style "j'ai un plugin, mais je dois en utiliser un autre pour qu'il fonctionne".

En espérant que quelqu'un ait une solution, ou au moins une piste, de manière à m'éclairer.
Merci d'avance.