2017-08-20 8 views
0

Je veux créer une application en utilisant javafx. Il ressemble à ceci:Comment ajouter un nœud enfant sans affecter la disposition du parent GridPane

Je veux ajouter la fonction de zoom pour le graphique. Lorsque je clique sur le bouton "Zoom avant", l'application deviendra fig2. Cependant, je n'ai aucune idée pour y arriver. Quand je change la taille du panneau inclus le tableau, il va changer la taille du panneau de grille, ressemble à ceci:

this

+0

Je ne considère pas cette situation de zooming. Je pense que vous avez juste besoin de changer la hauteur et la largeur de votre 'Chart' lorsque le bouton est enfoncé. – Sedrick

Répondre

0

Vous ne voulez pas le zoom à considérer pour la mise en page de gridpane. Cela peut être réalisé en appliquant des transformations à l'enfant de la grille que vous voulez modifier.

L'exemple suivant montre comment zoomer un nœud alors que la souris est en vol stationnaire au-dessus:

private static Region createRegion(String background) { 
    Region region = new Region(); 
    region.setStyle("-fx-background-color:"+background); 
    region.setPrefSize(300, 100); 
    return region; 
} 

@Override 
public void start(Stage primaryStage) { 
    GridPane gp = new GridPane(); 

    // create background 
    gp.add(createRegion("green"), 0, 0); 
    gp.add(createRegion("dodgerblue"), 0, 1); 

    // create region to be zoomed 
    Region zoomRegion = createRegion("red"); 
    GridPane.setFillWidth(zoomRegion, Boolean.FALSE); 
    GridPane.setFillHeight(zoomRegion, Boolean.FALSE); 
    zoomRegion.setPrefWidth(100); 
    Scale scale = new Scale(); 
    zoomRegion.getTransforms().add(scale); 

    // keep pivot at bottom left corner 
    scale.pivotYProperty().bind(zoomRegion.heightProperty()); 

    zoomRegion.hoverProperty().addListener((observable, oldValue, newValue) -> { 
     // adjust scale when hover state is changed 
     double scaleFactor = newValue ? 1.5 : 1; 
     scale.setX(scaleFactor); 
     scale.setY(scaleFactor); 
    }); 

    gp.add(zoomRegion, 0, 1); 

    Scene scene = new Scene(gp); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

Merci, ça marche bien. Mais je rencontre une autre question. Lorsque j'effectue un zoom sur le graphique, il se chevauche avec un autre graphique. Par exemple, avant de zoomer, ça ressemble à [ça] (https://drive.google.com/open?id=0B40SG6a0JJCER0FMRHE3M1h2dlk), après avoir zoomé, ça ressemble à [ça] (https: // drive. google.com/open?id=0B40SG6a0JJCEbjVNMDFzYk5XaXc). J'ai défini le style du volet '" -fx-background-color: rgb (255, 255, 255, 1) "' – huangjs