2013-06-03 9 views
3

j'ai cet exemple simple avec des onglets JavaFX:onglet Redimensionner JavaFX lors d'un double clic

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("[email protected] 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("[email protected] 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("[email protected] 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; 
    } 


} 

Je veux quand je double-cliquez sur un nom de l'onglet afin de maximiser la taille du corps de l'onglet et faire la même largeur et la hauteur de la taille de l'application. Similaire par exemple aux onglets IDE Eclipse. Est-ce possible avec JavaFX?

EDIT

Voici le code que je l'ai testé.

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("[email protected] 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("[email protected] 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; 
    } 

Le problème est de savoir comment je peux couvrir la scène avec le code de tabulation lorsque je double-clique sur le nom de l'onglet?

+0

Dans votre exemple de code, les onglets sont déjà agrandis. Donner un exemple où il y a d'autres composants autour du tabPane. Parce qu'il est important de connaître la disposition de la scène, et la maximisation est relative et liée à cette mise en page. –

+0

J'ai mis à jour le post. J'ai une scène principale avec borderpane. Sur le côté gauche, j'ai un simple onglet. Comment je peux modifier le code de cette façon. Je veux quand je clique sur le nom de l'onglet pour maximiser le corps de l'onglet et remplir la scène avec les onglets. Similaire à Eclipse lorsque je double-clique sur un nom d'onglet. –

Répondre

1

Devez-vous ajouter quelques lignes à votre code, voici un exemple pour vous,

..... 

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 

      } 
     } 
    } 
}); 

.... 

Essayez cela et dire s'il y a des difficultés.

+0

Encore une question: je veux que le panneau affecté prenne le pas sur tous les autres panneaux. Par exemple faire le panneau pour superposer tous les autres panneaux ou peut-être pour masquer tous les autres panneaux. –

+0

définissez votre hBox qui contient votre mainPane à l'avant par hbox.toFront(); –

+0

if (mouseEvent.getClickCount() == 2) { mainPane.setPrefSize (500, 500); // Votre taille requise hbox.toFront(); } –

1

Vous pouvez créer un autre BorderPane qui contient votre root = new BorderPane(); dans Center, et remplacez-le par l'onglet Tab sur doubleClick.

Entraînant:

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 

avec "rootroot" étant la nouvelle racine (grand nom, je sais ^^), et

Label tabALabel=new Label("[email protected] 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); 
       } 
      } 
     } 
    }); 

pour maximiser.