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

3 に答える 3

1

そこからのみ使用される場合、なぜシングルトンが必要なのですか。シングルトンの要点は、どこからでも同じインスタンスを使用できるようにすることです。

于 2012-08-10T23:14:14.420 に答える
0

シングルトンを使用して新しいウィンドウを作成することをお勧めしますか?

まあ、それはデザインの問題に帰着します。

アプリケーションで の単一の共有インスタンスのみを使用したい場合はComponent、singlton は悪いアプローチではないと思います。この選択を強制します。

ただし、同じものの複数のインスタンスを表示しComponentたいが、より簡単な方法で構築したい場合や、API を介して非具体的なインターフェイスを公開したい場合は、Factoryパターンを選択することをお勧めします。

于 2012-08-10T23:11:21.517 に答える
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 は非常にバグが多く、フォームを破棄して再作成すると、インターフェイスで多くのことが台無しになる可能性があります。それで、あなたの質問に戻ります...フォームを管理するためにシングルトンまたはファクトリを実装することが最善の方法です。お役に立てれば。

于 2012-08-10T23:56:04.940 に答える