单身创建新窗口

时间:2012-08-10 22:59:40

标签: java javafx-2

使用singleton创建新窗口是个好习惯吗?

我有主窗口,我想创建另一个窗口。此窗口仅用于更改主窗口中的属性。

我的代码:

主窗口

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();
}
}

3 个答案:

答案 0 :(得分:1)

如果它只是从那里使用,为什么你想要一个单身人士。 Singleton的整点是这样你可以从任何地方使用它的相同内容。

答案 1 :(得分:0)

  

使用singleton创建新窗口是个好习惯吗?

嗯,这归结为一个设计问题。

如果你只想在你的应用程序中拥有Component的单个共享实例,那么我会说唱歌不是一个糟糕的方法。它将迫使这种选择。

但是,如果要显示相同Component的多个实例,但想要一种更简单的构造方法,或者希望通过API公开非具体接口,那么{{ 1}}模式将是更好的选择。

答案 2 :(得分: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
 }
}

当在程序中“处置”面板/表单时,你应该有一个清除面板的方法,强制它们恢复到原始状态,并将它们设置为false。

Swing非常错误,处理表单并重新创建它们可能会破坏界面中的很多东西。所以,回到你的问题......实施单身人士或工厂来管理你的表格应该是最好的方法。 希望这会有所帮助。