双击时调整JavaFX选项卡的大小

时间:2013-06-03 09:47:32

标签: java javafx-2 javafx javafx-8

我在JavaFX标签中有这个简单的例子:

    public class test extends Application
{

    private BorderPane root;

    // Navigation Utilization
    private ActionTabs actiontabs;

    @Override
    public void start(Stage primaryStage)
    {

        // Set Main Window Label
        primaryStage.setTitle("Desktop Client");
        Image iv = new Image(getClass().getResource("/images/internet-icon.png").toExternalForm());
        primaryStage.getIcons().add(iv);

        root = new BorderPane();
        root.setLeft(getLeftHBox(primaryStage, root));
        Scene scene = new Scene(root, 1000, 1000, Color.WHITESMOKE);  // Set main Stage color

        primaryStage.setScene(scene);

        Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();

        // Set Stage boundaries to visible bounds of the main screen
        primaryStage.setX(primaryScreenBounds.getMinX());
        primaryStage.setY(primaryScreenBounds.getMinY());
        primaryStage.setWidth(primaryScreenBounds.getWidth());  // Maximum width of the display
        primaryStage.setHeight(primaryScreenBounds.getHeight());    // Maximum height of the display
        primaryStage.show();

    }

    public static void main(String[] args)
    {
        launch(args);
    }

    private HBox getLeftHBox(Stage primaryStage, BorderPane root)
    {
        HBox hbox = new HBox();

        TabPane tabPane = new TabPane();
        BorderPane mainPane = new BorderPane();

        tabPane.setStyle("-fx-font-size: 12pt;"); // Set global size for the font
        // Create Tabs
        Tab tabA = new Tab();
        tabA.setText("Main Component");
        tabA.setStyle("-fx-font-size: 12pt;"); // Set size of the tab name
        tabA.setClosable(false); 
        // Add something in Tab
        StackPane tabA_stack = new StackPane();
        tabA_stack.setAlignment(Pos.CENTER);
        tabA_stack.getChildren().add(new Label("Label@Tab A"));
        tabA.setContent(tabA_stack);
        tabPane.getTabs().add(tabA);

        Tab tabB = new Tab();
        tabB.setText("Second Component");
        tabB.setStyle("-fx-font-size: 12pt;"); // Set size of the tab name
        tabB.setClosable(false); 
        // Add something in Tab
        StackPane tabB_stack = new StackPane();
        tabB_stack.setAlignment(Pos.CENTER);
        tabB_stack.getChildren().add(new Label("Label@Tab B"));
        tabB.setContent(tabB_stack);
        tabPane.getTabs().add(tabB);

        Tab tabC = new Tab();
        tabC.setText("Last Component");
        tabC.setStyle("-fx-font-size: 12pt;"); // Set size of the tab name
        tabC.setClosable(false); // da se mahne opciqta da se zatvarq tab
        // Add something in Tab
        StackPane tabC_vBox = new StackPane();
        tabC_vBox.setAlignment(Pos.CENTER);
        tabC_vBox.getChildren().add(new Label("Label@Tab C"));
        tabC.setContent(tabC_vBox);
        tabPane.getTabs().add(tabC);

        mainPane.setCenter(tabPane);

        mainPane.setPrefSize(300, 500);
        //mainPane.setLayoutX(5);     // Horizontal Position
        mainPane.setLayoutY(32);    // Vertical Position

        hbox.getChildren().addAll(mainPane);

        return hbox;
    }


}

我希望当我双击选项卡名称以最大化选项卡主体的大小并使其与应用程序的大小具有相同的宽度和高度时。类似于Eclipse IDE选项卡。这可以用JavaFX吗?

修改

这是我测试过的代码。

public BorderPane initNavigation(Stage primaryStage)
    {

        VBox stackedTitledPanes = createStackedTitledPanes();

        ScrollPane scroll = makeScrollable(stackedTitledPanes);

        final TabPane tabPane = new TabPane();
        final BorderPane mainPane = new BorderPane();

        final Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();

        tabPane.setStyle("-fx-font-size: 12pt;"); // Set global size for the font
        // Create Tabs
        Tab tabA = new Tab();

        tabPane.setOnMouseClicked(new EventHandler<MouseEvent>()
        {
            private double sizeX, sizeY;
            private boolean first = true;

            @Override
            public void handle(MouseEvent me)
            {
                if (first)
                {
                    sizeX = mainPane.getWidth();
                    sizeY = mainPane.getHeight();
                    first = false;
                }

                if (me.getButton().equals(MouseButton.PRIMARY) && me.getClickCount() % 2 == 0)
                {
                    if (sizeX != mainPane.getWidth() || sizeY != mainPane.getHeight())
                    {
                        mainPane.setPrefSize(sizeX, sizeY);

                    }
                    else
                    {
                        mainPane.setPrefSize(primaryScreenBounds.getWidth(), primaryScreenBounds.getHeight());
                        //mainPane.toFront();
                    }
                }
            }
        });

        tabA.setText("Main Component");
        tabA.setContextMenu(makeTabContextMenu(tabA, tabPane));  // Set right mouse click menu
        // Add something in Tab
        StackPane tabA_stack = new StackPane();
        tabA_stack.setAlignment(Pos.CENTER);
        tabA_stack.getChildren().add(scroll);
        tabA.setContent(tabA_stack);
        tabPane.getTabs().add(tabA);

        Tab tabB = new Tab();
        tabB.setText("Second Component");
        tabB.setContextMenu(makeTabContextMenu(tabB, tabPane));  // Set right mouse click menu
        // Add something in Tab
        StackPane tabB_stack = new StackPane();
        tabB_stack.setAlignment(Pos.CENTER);
        tabB_stack.getChildren().add(new Label("Label@Tab B"));
        tabB.setContent(tabB_stack);
        tabPane.getTabs().add(tabB);

        Tab tabC = new Tab();
        tabC.setText("Last Component");
        tabC.setContextMenu(makeTabContextMenu(tabC, tabPane));  // Set right mouse click menu
        // Add something in Tab
        StackPane tabC_vBox = new StackPane();
        tabC_vBox.setAlignment(Pos.CENTER);
        tabC_vBox.getChildren().add(new Label("Label@Tab C"));
        tabC.setContent(tabC_vBox);
        tabPane.getTabs().add(tabC);

        mainPane.setCenter(tabPane);
        mainPane.setPrefSize(300, 500);
        //mainPane.setLayoutX(5);     // Horizontal Position
        mainPane.setLayoutY(32);    // Vertical Position

        scroll.setPrefSize(395, 580);
        scroll.setLayoutX(5);
        scroll.setLayoutY(32);

        return mainPane;
    }

当我双击选项卡名称时,问题是我如何使用选项卡代码覆盖舞台?

2 个答案:

答案 0 :(得分:1)

您需要在代码中添加几行代码,这里有一个样本,

.....

Tab tabA = new Tab();

Label tabALabel = new Label("Main Component");
tabA.setGraphic(tabALabel);

tabALabel.setOnMouseClicked(new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent mouseEvent) {
        if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
            if (mouseEvent.getClickCount() == 2) {

                mainPane.setPrefSize(500, 500); //Your required size

            }
       }
    }
});

....

试试这个,告诉他们是否有任何困难。

答案 1 :(得分:1)

您可以创建另一个包含root = new BorderPane();的BorderPane 在中心,并在双击时用Tabpanel替换它。

导致:

   rootRoot = new BorderPane();
   BorderPane  root = new BorderPane();
   root.setLeft(getLeftHBox(primaryStage, root));
   rootRoot.setCenter(root);
   Scene scene = new Scene(rootRoot, 1000, 1000, Color.WHITESMOKE);  // Set main Stage color

“rootRoot”是新根(伟大的名字,我知道^^)和

    Label tabALabel=new Label("Label@Tab A");
    tabALabel.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent mouseEvent) {
            if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
                if (mouseEvent.getClickCount() == 2) {

                    //mainPane.setPrefSize(500, 500); //Your required size
                    rootRoot.setCenter(mainPane);
                }
           }
        }
    });

最大化。