2016-05-04 11 views
0

In meinem Programm gibt es 10 Verbindungen in connectionList. Für jede Verbindung erstelle ich meine Frames neu. Es bedeutet, dass ich den gleichen Rahmen für 10 Mal erstellen. Ich möchte es nur einmal erstellen und 10 Mal verwenden, nicht für jede Verbindung erstellen. Ich kann es nicht entwerfen. Ich habe meinen Teil des Codes über create frame gesendet. Könntest du nur ein Beispiel unter ihnen für mich machen? Sollte ich Singleton Muster verwenden? Was ist der Lösungsweg und wie sollte es gemacht werden? Weil ich im echten Programm 25 Frames habe. Wenn du eine davon machst, kann ich andere 24 Frames machen. Mit freundlichen GrüßenWie erstellt man einen Rahmen und benutzt ihn überall und jederzeit?

Hauptklasse

for (String wn : connectionList) { 
      if (!workSpacesNames.contains(wn)) { 
       try { 
        DWorkspace workSpace = new DWorkspace(wn, DMainFrame.this); 

        workSpaces.add(workSpace); 

        tabbedPane.addTab(workSpace.getTitle(), workSpace.getHolderPanel()); 

        workSpace.getDockingManager().setShowWorkspace(showWorkspaceArea); 

        workSpace.getDockingManager().beginLoadLayoutData(); 

        if (UserAuthorization.getUserAuth().isAuthorized(CommandAuthType.CANCELEDORDERS_WINDOW)) { 
         workSpace.getDockingManager().addFrame(DFrameFactory.createClosedOrderTable(
           workSpace, canceledOrderSound, DockContext.STATE_HIDDEN)); 
        } 
        if (UserAuthorization.getUserAuth().isAuthorized(CommandAuthType.CANCELEDSTRATEGIES_WINDOW)) { 
         workSpace.getDockingManager().addFrame(DFrameFactory.createClosedStrategyTable(
           workSpace, canceledStrategySound, DockContext.STATE_HIDDEN)); 
        } 
        } 
        catch (Exception ex) { 
       log.trace("exception in DMainFrame", ex); 
      } 
        } 
        } 

erstellen Frames Klasse

public class DFrameFactory { 

    private DFrameFactory() { 
    } 

public static DockableFrame createClosedOrderTable(DWorkspace workspace,JCheckBoxMenuItem canceledOrderSound, int context) { 
     DockableFrame frame = new DockableFrame("closedorders"); 
     frame.setTitle(ELanguage.getString("(LANG)org.neyre.dallar.frame.framefactory.closedorders.title")); 
     frame.setTabTitle(
       ELanguage.getString("(LANG)org.neyre.dallar.frame.framefactory.closedorders.tabtitle")); 
     frame.setSideTitle(ELanguage.getString(
       "(LANG)org.neyre.dallar.frame.framefactory.closedorders.sidetitle")); 
     frame.getContext().setInitMode(context); 
     frame.getContext().setInitSide(DockContext.DOCK_SIDE_SOUTH); 
     frame.getContext().setInitIndex(1); 

     frame.getContentPane().add(new DFClosedOrderTable(workspace, canceledOrderSound)); 

     frame.setPreferredSize(new Dimension(750, 300)); 
     frame.setDockedWidth(750); 
     frame.setFrameIcon(EIcons.getSmallIcon(EIcons.ERROR)); 
     return frame; 
    } 

    public static DockableFrame createClosedStrategyTable(DWorkspace workspace,JCheckBoxMenuItem canceledStrategySound, int context) { 
     DockableFrame frame = new DockableFrame("closedstrategies"); 
     frame.setTitle(ELanguage.getString("(LANG)org.neyre.dallar.frame.framefactory.closedstrategies.title")); 
     frame.setTabTitle(
       ELanguage.getString("(LANG)org.neyre.dallar.frame.framefactory.closedstrategies.tabtitle")); 
     frame.setSideTitle(ELanguage.getString(
       "(LANG)org.neyre.dallar.frame.framefactory.closedstrategies.sidetitle")); 
     frame.getContext().setInitMode(context); 
     frame.getContext().setInitSide(DockContext.DOCK_SIDE_SOUTH); 
     frame.getContext().setInitIndex(1); 

     frame.getContentPane().add(new DFClosedStrategyTable(workspace, canceledStrategySound)); 

     frame.setPreferredSize(new Dimension(750, 300)); 
     frame.setDockedWidth(750); 
     frame.setFrameIcon(EIcons.getSmallIcon(EIcons.ERROR)); 
     return frame; 
    } 

    } 
+0

Was ist ein 'DockableFrame'? Macht nichts. Bessere Hilfe früher, poste ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) - das wird es erklären. –

+0

DockableFrame ist eine abstrakte Klasse und erweitert JComponent. Möchten Sie den Code der DockableFrame-Klasse sehen? –

+0

* "Möchten Sie sehen .." * Für bessere Hilfe eher .. Bitte lesen Sie beide Dokumente, bevor Sie Änderungen vornehmen. –

Antwort

0

Basierend auf dem obigen Code, wenn der Benutzer nur eine Verbindungseigenschaften zu einer Zeit sehen kann, ist es dann ist in Ordnung, um eine Singleton-Instanz des Frames zu erstellen. Wenn der Benutzer jedoch mehrere Verbindungen gleichzeitig anzeigen kann, müssen Sie mehr als einen Rahmen erstellen.

Aber Erstellung von Frames können verschiedene Muster

  • Singleton folgen, wenn nur ein Rahmen
  • faule Initialisierung des Rahmens sehen
  • einen Pool von Bildern erstellen und wiederverwenden.

wieder zu verwenden, welcher Ansatz auf den Anwendungsfall beruhen würde und UX