jackisback
Erfahrenes Mitglied
Hallo,
ich habe folgendes Problem:
Eine Klasse GUI die auch die Main Methode beinhaltet hat einen GUIManager.
Der GUIManager ist ein Singleton und bietet eine Methode zum Hinzufügen von Button "addButton()".
Jetzt sollen Subsysteme (Klassen) die die GUI nicht kennt! die Möglichkeit haben Button über den GUIManager an der GUI anzumelden.
Da die GUI die Sybsysteme nicht kennt und auch nicht weiß wie viele es davon gibt kann es keine Objekte davon erzeugen!
Wie kann man dieses Problem lösen?
VG
ich habe folgendes Problem:
Eine Klasse GUI die auch die Main Methode beinhaltet hat einen GUIManager.
Der GUIManager ist ein Singleton und bietet eine Methode zum Hinzufügen von Button "addButton()".
Jetzt sollen Subsysteme (Klassen) die die GUI nicht kennt! die Möglichkeit haben Button über den GUIManager an der GUI anzumelden.
Da die GUI die Sybsysteme nicht kennt und auch nicht weiß wie viele es davon gibt kann es keine Objekte davon erzeugen!
Wie kann man dieses Problem lösen?
Java:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class GUI {
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
/** Create the GUI and show it. For thread safety,
* this method should be invoked from the #
* * event-dispatching thread.
* */
private static void createAndShowGUI() {
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GUIManager gm = GUIManager.getInstance();
JButton btn = gm.getButton();
if (btn != null) {
frame.getContentPane().add(btn);
}
//Display the window.
frame.pack();
frame.setVisible(true);
}
}
import java.util.ArrayList;
import javax.swing.JButton;
public final class GUIManager
{
/**
* Privates Klassenattribut,
* wird beim erstmaligen Gebrauch (nicht beim Laden) der Klasse erzeugt
*/
private static GUIManager instance;
private ArrayList<JButton> allButtons = new ArrayList<JButton>();
/** Konstruktor ist privat, Klasse darf nicht von außen instanziiert werden. */
private GUIManager() {}
/**
* Statische Methode „getInstance()“ liefert die einzige Instanz der Klasse zurück.
* Ist synchronisiert und somit thread-sicher.
*/
public synchronized static GUIManager getInstance()
{
if (instance == null)
{
instance = new GUIManager();
}
return instance;
}
public JButton getButton() {
if (!this.allButtons.isEmpty()) {
return this.allButtons.get(0);
}
return null;
}
public void addButton(JButton btn) {
this.allButtons.add(btn);
}
}
import javax.swing.JButton;
public class Subsystem1 {
static{
GUIManager gm = GUIManager.getInstance();
gm.addButton(new JButton("Subsystem1"));
}
}
import javax.swing.JButton;
public class Subsystem2 {
static{
GUIManager gm = GUIManager.getInstance();
gm.addButton(new JButton("Subsystem2"));
}
}
...
VG
Zuletzt bearbeitet von einem Moderator: