Resize JavaFX tab when double click
我用JavaFX选项卡做了一个简单的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | 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有可能做到这一点吗?
编辑
这是我测试过的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | 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; } |
问题是,当我双击选项卡名称时,如何用选项卡代码覆盖该阶段?
您可以创建另一个边界窗格,其中包含您的
导致:
1 2 3 4 5 | 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 |
"root root"是新的根(好名字,我知道^),并且
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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); } } } }); |
为了最大化。
您需要在代码中添加几行,这是一个示例,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ..... 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 } } } }); .... |
试试这个,看看有没有什么困难。