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

我有一个简单的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() { 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; } 

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

您需要在代码中添加几行,以下是您的示例,

 ..... Tab tabA = new Tab(); Label tabALabel = new Label("Main Component"); tabA.setGraphic(tabALabel); tabALabel.setOnMouseClicked(new EventHandler() { @Override public void handle(MouseEvent mouseEvent) { if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) { if (mouseEvent.getClickCount() == 2) { mainPane.setPrefSize(500, 500); //Your required size } } } }); .... 

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

您可以创建另一个包含root = new 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() { @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); } } } }); 

最大化。