tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
542
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    jackisback jackisback ist offline Mitglied Gold
    Registriert seit
    Jul 2007
    Beiträge
    100
    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?
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    
    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
    Geändert von sheel (07.11.11 um 16:13 Uhr) Grund: Doppel und Codetags
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi,
    das wird wahrscheinlich schierig, wenn du - wie in deinem Code - dem GUIManager nicht einmal sagst, zu welcher Oberfläche er die Buttons hinzufügen soll. Oder soll der GUIManager die Buttons nur speichern?

    Gruß

    Fabio
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  3. #3
    Technoblade Technoblade ist offline Mitglied Gold
    Registriert seit
    Feb 2009
    Beiträge
    193
    Darauf, dass GUIManager ein Singleton ist schließe ich mal, dass es wirklich nur einen davon gibt, der für alle GUI's zustädnig ist, auch wenn das oben bei dir nicht wirklich so deutlich wird. Mir fällt dazu direkt das Fabrikmuster in einer Modifikation ein, wie sie auch beim Fliegengewicht-Muster verwendet wirst. Dass du also in der Fabrik eine Methode implementierst die den Subsystemen die GUI's gibt die sie brauchen, bzw. diese erst noch erzeugt.
     

  4. #4
    Tarsuinn Tarsuinn ist offline Rookie
    Registriert seit
    Oct 2009
    Beiträge
    6
    Hätte auch mal eine Frage zum thema Entwurfsmuster.

    Folgender Fall sei gegeben:

    Es soll ein System aufgebaut werden in dem Jahrestage eines Unternehmens verwaltet werden (Einstellung eines Mitarbeiters, Gründung, und ähnliches).
    Das System hat andere Funktionen für unterschiedliche Benutzerrollen, z.B. Können alle Mitarbeiter Vorschläge für neue Jahrestage machen und Verwalter (die auch Mitarbeiter sind) diese akzeptieren oder an die Unternehmensführung (Ebenfalls auch Mitarbeiter) weiterleiten.
    Weiterhin hat jeder Mitarbeiter eine Privatversion, wo dieser Privattermine verwalten kann.



    Jetzt die Frage dazu, wie würde man sowas mit dem Fabrik Entwurfsmuster umsetzten, bzw. wie wären da die Zusammenhänge? Hatte mir bereits folgendes überlegt:

    Produkt = Jahrestag
    konkretes Produkt = ein definierter Jahrestag
    Erzeuger = Mietarbeiter
    konkreter Erzeuger = ****?
     

Ähnliche Themen

  1. SF Grafiken gesucht bzw. Grafiker der zuarbeitet gesucht
    Von sqlman im Forum Stellenangebote (entgeltlich)
    Antworten: 0
    Letzter Beitrag: 04.11.10, 17:13
  2. Antworten: 4
    Letzter Beitrag: 25.01.09, 01:58
  3. Entwurfsmuster
    Von lernen.2007 im Forum Java
    Antworten: 9
    Letzter Beitrag: 28.01.07, 12:06
  4. Template Method Entwurfsmuster?
    Von Math55 im Forum Java
    Antworten: 4
    Letzter Beitrag: 19.03.06, 19:18
  5. gesucht...
    Von RedZack im Forum Smalltalk
    Antworten: 1
    Letzter Beitrag: 26.07.01, 11:46

Stichworte