Hallo,
ich habe aktuell ein kleines Problem bei dem ich einen Tipp/Rat benötige.
Es geht um eine kleine API für Desktopanwendungen die aktuell immer nur eine Anwendung "verarbeiten" kann. D.h. es ist immer nur eine Anwendung gestartet und alle geöffneten Fenster gehören dieser einen Anwendung.
Damit sich die Fenster untereinander nicht kennen müssen, sich aber relativ zueinander positionieren können, wurde einst folgender Code/Mechanismus gebaut :
Der aktuelle Code sieht (stark vereinfacht!) so aus :
KLASSE MyJFrame
KLASSE MyJDialog
KLASSE MyWindowManager
Nun soll die API weiterentwickelt werden damit mehrere Anwendungen bzw. Plugins parallel gestartet werden können. Diese Plugins haben natürlich jeweils eigene Dialoge!
Das Problem : Der statische Zugriff auf MyWindowManager ist so ja nun nicht mehr möglich weil dort ja nicht zwischen den Anwendungen getrennt wird. Es kann dann also passieren das ein Fenster von Plugin2 plötzlich über/relativ zu einem Fenster von Plugin1 positioniert wird o.ä..
Was nun also tun?
Mein erster Ansatz war daß ich nun sowas wie einen PluginKontext halte der das Plugin ja eindeutig identifizieren kann. Problem hierbei ist nur das dieser Kontext ja dann überall hin durchgereicht werden muss, damit auch noch in der "hintersten anonymen Klasse" auch ein Fenster gestartet werden kann!.
Ich suche nun nach einer eleganten/cleveren/gängigen Möglichkeit dieses "Problem" möglichst komfortabel zu beheben. Gibt es für sowas nicht vllt. auch ein "Pattern" o.ä.. Eigentlich müsste sowas ja ein "gängiges" Problem sein, oder?
Hat jemand einen Tipp/Rat und/oder Erfahrung mit solch einem Problem?
Gruß
andre
--------------------
edit : Nur kleinere Compile-Fehler behoben
ich habe aktuell ein kleines Problem bei dem ich einen Tipp/Rat benötige.
Es geht um eine kleine API für Desktopanwendungen die aktuell immer nur eine Anwendung "verarbeiten" kann. D.h. es ist immer nur eine Anwendung gestartet und alle geöffneten Fenster gehören dieser einen Anwendung.
Damit sich die Fenster untereinander nicht kennen müssen, sich aber relativ zueinander positionieren können, wurde einst folgender Code/Mechanismus gebaut :
Der aktuelle Code sieht (stark vereinfacht!) so aus :
KLASSE MyJFrame
Code:
import javax.swing.JFrame;
public class MyJFrame extends JFrame {
/*
* Konstruktor 01
* Konstruktor 02
* Konstruktor 03
* ...
*/
/**
* Überschrieben damit Fenster immer (zueinander) zentriert werden!
*/
public void setVisible(boolean visible) {
if(visible) {
MyWindowManager.setActiveWindow(this);
}
super.setVisible(visible);
}
}
KLASSE MyJDialog
Code:
import javax.swing.JDialog;
public class MyJDialog extends JDialog {
/*
* Konstruktor 01
* Konstruktor 02
* Konstruktor 03
* ...
*/
/**
* Überschrieben damit Fenster immer (zueinander) zentriert werden!
*/
public void setVisible(boolean visible) {
if(visible) {
MyWindowManager.setActiveWindow(this);
}
super.setVisible(visible);
}
}
KLASSE MyWindowManager
Code:
import java.awt.Window;
public class MyWindowManager {
private static Window activeWindow = null;
/**
* Liefert das aktive Fenster!
*/
public static Window getActiveWindow() {
return activeWindow;
}
/**
* Kann Fenster (zueinander) zentrieren!
*/
public static void setActiveWindow(Window window) {
// Fenster (zueinander) zentrieren!
window.setLocationRelativeTo(getActiveWindow());
// Fenster aktiv setzen!
activeWindow = window;
}
}
Nun soll die API weiterentwickelt werden damit mehrere Anwendungen bzw. Plugins parallel gestartet werden können. Diese Plugins haben natürlich jeweils eigene Dialoge!
Das Problem : Der statische Zugriff auf MyWindowManager ist so ja nun nicht mehr möglich weil dort ja nicht zwischen den Anwendungen getrennt wird. Es kann dann also passieren das ein Fenster von Plugin2 plötzlich über/relativ zu einem Fenster von Plugin1 positioniert wird o.ä..
Was nun also tun?
Mein erster Ansatz war daß ich nun sowas wie einen PluginKontext halte der das Plugin ja eindeutig identifizieren kann. Problem hierbei ist nur das dieser Kontext ja dann überall hin durchgereicht werden muss, damit auch noch in der "hintersten anonymen Klasse" auch ein Fenster gestartet werden kann!.
Ich suche nun nach einer eleganten/cleveren/gängigen Möglichkeit dieses "Problem" möglichst komfortabel zu beheben. Gibt es für sowas nicht vllt. auch ein "Pattern" o.ä.. Eigentlich müsste sowas ja ein "gängiges" Problem sein, oder?
Hat jemand einen Tipp/Rat und/oder Erfahrung mit solch einem Problem?
Gruß
andre
--------------------
edit : Nur kleinere Compile-Fehler behoben
Zuletzt bearbeitet: