2012-08-10 51 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很漂亮,处理表单并重新创建它们可能会让界面中的许多事情变得糟糕。所以,回到你的问题......实施一个单身人士或工厂来管理你的形式应该是最好的方法。 希望这有助于。