使用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();
}
}
答案 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非常错误,处理表单并重新创建它们可能会破坏界面中的很多东西。所以,回到你的问题......实施单身人士或工厂来管理你的表格应该是最好的方法。 希望这会有所帮助。