2012-08-10 47 views
1

使用單身人士創建新窗口是一種很好的做法嗎?單身人士創建新窗口

我有主窗口,我想創建另一個。此窗口僅用於更改主窗口中的屬性。

我的代碼:

主窗口

public class MainWindow { 

private StackPane root = new StackPane(); 
private Stage primaryStage = new Stage(); 

    public void run(){ 

    primaryStage.setTitle("v0.2-alpha"); 
    Scene scene = new Scene(root, 600, 400); 
    scene.getStylesheets().addAll("css/style.css"); 

    MainMenu mmb = new MainMenu();  

    VBox vBox = new VBox(); 
    vBox.getChildren().add(mmb.createMenuBar()); 

    ISplitPane lsp = new SplitPaneLeftImpl(); 
    ISplitPane csp = new SplitPaneCenterImpl(); 
    ISplitPane rsp = new SplitPaneRightImpl(); 

    HBox hboxpane = new HBox(); 
    hboxpane.getChildren().addAll(spl.createSplitPane(), spc.createSplitPane(), spr.createSplitPane()); 

    root.getChildren().addAll(vBox,hboxpane); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

}

創建新的窗口類

public interface IStage { 
    public void createStage(); 
} 



class StageOptionsImpl implements IStage{ 
private OptionsStage(){} 

private Stage stageOptions = new Stage(); 

private static StageOptionsImpl os = null; 

public static StageOptionsImpl getInstance(){ 
    if(os == null){ 
     synchronized(StageOptionsImpl.class){ 
      if(os == null){ 
       os = new StageOptionsImpl(); 
      } 
     } 
    } 
    return os; 
} 

@Override 
public void createStage(){ 
GridPane gp = new GridPane(); 
    TabPane tabPane = new TabPane(); 
    tabPane.setSide(Side.LEFT);     

    Tab tabSecurity = new Tab("Security"); 
    tabSecurity.setContent(new SecurityTab().tabCreate()); 

    Tab tab2 = new Tab("System Data"); 
    tab2.setContent(new DataTab().tabCreate()); 

    Tab tab3 = new Tab("tab 3"); 
    tab3.setContent(new SecurityTab().tabCreate()); 

    tabPane.getTabs().addAll(tabSecurity, tab2, tab3); 

    Scene sceneOptions = new Scene(tabPane, 400, 300, Color.AQUA); 
    stageOptions.setScene(sceneOptions); 
    stageOptions.show(); 
} 
} 
+0

「單身人士」不應該在任何「最佳實踐」中,除非在「不」之前。 – 2012-08-11 02:42:21

回答

0

它使用單來創建新的窗口,好的做法呢?

那麼,這歸結於設計問題。

如果你只想在你的應用程序中擁有一個Component的單個共享實例,那麼我認爲單身並不是一個壞方法。它會強制這個選擇。

但是,如果要顯示同一個Component的多個實例,但想要構造它的更簡單的方法,或者想要通過API公開非具體接口,那麼Factory模式應該是一個更好的選擇。

1

如果只是從那裏使用它,爲什麼你想要一個單身人士。 Singleton的全部內容是你可以在任何地方使用它的同一個實例。

0

管理這些窗口的最佳方法通常是創建一個管理程序中所有窗口/面板的類。

如果你想打開名爲「ClientForm」面板應該有這樣的方法:

public void OpenClientForm(){ 

// Set the other forms to their default form(when != null) and set their visibility as false (when != null). 
    RestorePanels(); 
// In case it hasn't been created yet 
if (ClientForm == null){ 
// calls a factory that creates the form. 
} 
else{ 
// Set the form as visible 
} 
} 

當面板的「處置」計劃內/表你應該有清除的方法面板,迫使它們恢復到原始狀態,並將它們設置爲假。

Swing很漂亮,處理表單並重新創建它們可能會讓界面中的許多事情變得糟糕。所以,回到你的問題......實施一個單身人士或工廠來管理你的形式應該是最好的方法。 希望這有助於。