2017-08-20 1 views
0

Ich möchte eine App mit javafx erstellen. Es sieht wie folgt aus:So fügen Sie untergeordnete Knoten hinzu, ohne das Layout von GridPane Eltern zu beeinflussen

ich die Zoomfunktion für das Diagramm hinzufügen möchten. Wenn ich auf den Button "Vergrößern" klicke, wird die App zu fig2. Ich habe jedoch keine Idee, es zu erreichen. Wenn ich die Größe der Scheibe das Diagramm enthalten ändern, wird es Gitterfenster Größe ändern, sieht wie folgt aus:

this

+0

ich dies eine Zoom Situation nicht in Betracht ziehen würde. Ich denke, Sie müssen nur die Höhe und Breite von "Chart" ändern, wenn Sie die Taste drücken. – Sedrick

Antwort

0

Sie wollen nicht die Zoom für die gridpane Layout berücksichtigt werden. Dies kann erreicht werden, indem Transformationen auf das Kind der zu ändernden Rasterfläche angewendet werden.

Das folgende Beispiel zeigt, wie ein Knoten zu vergrößern, während die Maus über sie schwebt:

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

Danke, es funktioniert gut. Aber ich treffe eine andere Frage. Wenn ich das Diagramm zoome, überschneidet es sich mit anderem Diagramm. Wenn ich beispielsweise heranzoomen sehe, sieht es wie [das] aus (https://drive.google.com/open?id=0B40SG6a0JJCER0FMRHE3M1h2dlk), nach dem Einzoomen sieht es aus wie [das] (https: // Laufwerk. google.com/open?id=0B40SG6a0JJCEbjVNMDFzYk5XaXc). Ich habe den Fensterstil "-fx-background-color: rgb (255, 255, 255, 1)" gesetzt – huangjs

Verwandte Themen