0

タブのコンテンツを新しいウィンドウに表示し、TabPane タブを閉じるオプションを備えたこのコンテキスト メニューがあります。

MenuItem item5 = new MenuItem("Open Tab In Stand-Alone Window");
        item5.setOnAction(new EventHandler<ActionEvent>()
        {
            @Override
            public void handle(ActionEvent e)
            {
                System.out.println("Open Tab In Stand-Alone Window");
                Node test = tab.getContent();

                NavMenu.standAloneTab(test);
                tabPane.getTabs().remove(tab);

            }
        });

タブ コンテンツを含む新しいダイアログ:

public static void standAloneTab(Node tab)
    {
        final int xSize = 640;
        final int ySize = 480;
        final Color backgroundColor = Color.WHITESMOKE;

        Stage newConnDialog = new Stage();
        newConnDialog.initModality(Modality.WINDOW_MODAL);

        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(20, 20, 20, 20));

        grid.add(tab, 0, 0);

        Scene aboutDialogScene = new Scene(grid, xSize, ySize, backgroundColor);
        newConnDialog.setScene(aboutDialogScene);
        newConnDialog.show();
    }

新しいウィンドウを選択Open Tab In Stand-Alone Windowすると、タブの内容が表示されますが、古いタブは閉じられません。タブを閉じるために呼び出すtabPane.getTabs().remove(tab);と、新しいウィンドウは空です。

コンテンツを削除せずにタブを閉じるにはどうすればよいですか?

編集

このようにコードを更新しました:

MenuItem item5 = new MenuItem("Open Tab in Stand-alone Window");
    item5.setOnAction(new EventHandler<ActionEvent>()
    {
        @Override
        public void handle(ActionEvent e)
        {
            System.out.println("Open Tab In Stand-Alone Window");
            Node openedTab = tab.getContent();

            NavMenu.standAloneTab(tabPane, openedTab);
            //tabPane.getTabs().remove(tab);

        }
    });

そして新しいダイアログ:

public static void standAloneTab(final TabPane tabPane, final Node tab)
    {

        Stage newConnDialog = new Stage();
        newConnDialog.initModality(Modality.WINDOW_MODAL);

        newConnDialog.setOnShown(new EventHandler<WindowEvent>()
        {
            @Override
            public void handle(WindowEvent t)
            {
                tabPane.getTabs().remove(tab);
            }
        });

        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(20, 20, 20, 20));

        grid.add(tab, 0, 0);

        Scene aboutDialogScene = new Scene(grid, 700, 500, Color.WHITESMOKE);
        newConnDialog.setScene(aboutDialogScene);
        newConnDialog.show();
    }

コードを更新しましたが、同じ結果が得られます。

4

2 に答える 2

2

tabPane.getTabs().remove(tab);として呼び出してみてください

newConnDialog.setOnShown(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent t) {
        tabPane.getTabs().remove(tab);
    }
});

これが役立つことを願っています。

于 2013-07-03T09:33:57.123 に答える
1

コンテキスト メニューを使用して、選択したタブ以外の他のタブを閉じるには??

    public void start(Stage primaryStage) {
        primaryStage.setTitle("Tabs");
        Group root = new Group();
        Scene scene = new Scene(root, 400, 250, Color.WHITE);

        TabPane tabPane = new TabPane();

        BorderPane borderPane = new BorderPane();
        for (int i = 0; i < 5; i++) {
            Tab tab = new Tab();
            tab.setText("Tab" + i);
            HBox hbox = new HBox();
            hbox.getChildren().add(new Label("Tab" + i));
            hbox.setAlignment(Pos.CENTER);
            tab.setContent(hbox);
            tabPane.getTabs().add(tab);

            ContextMenu contextMenu = new ContextMenu();
            MenuItem close = new MenuItem();
            MenuItem closeOthers = new MenuItem();
            MenuItem closeAll = new MenuItem();

            close.setText("Close");
            closeOthers.setText("Close Others");
            closeAll.setText("Close All");
            contextMenu.getItems().addAll(close,closeOthers,closeAll);
            tab.setContextMenu(contextMenu);

            ObservableList<Tab> tablist = tabPane.getTabs();


            close.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event)
                {
                    tabPane.getTabs().remove(tabPane.getSelectionModel().getSelectedItem());
                }
            });

            closeOthers.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event)
                {
                    tabPane.getTabs().removeAll();
                }
            });

            closeAll.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event)
                {
                    tabPane.getTabs().removeAll(tablist);
                }
            });
        }

        // bind to take available space
        borderPane.prefHeightProperty().bind(scene.heightProperty());
        borderPane.prefWidthProperty().bind(scene.widthProperty());

        borderPane.setCenter(tabPane);
        root.getChildren().add(borderPane);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

}
于 2015-11-20T09:29:47.013 に答える