child z ordering
James Dunsdon
james at mindmagic.ca
Fri Apr 12 19:32:32 UTC 2019
Hi,
I'm wondering if there is any consideration towards being able to modify
child Z ordering. Currently it only seems based on add order. There are
a few use cases where slight overlapping might be desired in which case
z ordering should be independently controllable of layout order.
toFront(), toBack() only seem to work with Groups. I've given a code
example of a use case below. My current workaround is to use rotations
to created the desired effect.
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = new VBox(createDefaultBehavior(),
createPreferredBehavior());
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
private Node createDefaultBehavior(){
HBox box = new HBox(createCircle(), createRectangle());
box.setAlignment(Pos.CENTER_LEFT);
box.setSpacing(-10);
return box;
}
/*
in this case since we are using symmetric shapes the node rotations
are unnecessary,
however they would be required for most content
*/
private Node createPreferredBehavior(){
Node circle = createCircle();
circle.setRotate(-180);
Node rectangle = createRectangle();
rectangle.setRotate(-180);
HBox box = new HBox(rectangle, circle);
box.setAlignment(Pos.CENTER_RIGHT);
box.setRotate(180);
box.setSpacing(-10);
return box;
}
private Node createCircle(){
Circle circle = new Circle(30, Color.RED);
circle.setStroke(Color.GOLDENROD);
circle.setStrokeWidth(4.0);
return circle;
}
private Node createRectangle(){
Rectangle rectangle = new Rectangle(100, 40, Color.GREEN);
rectangle.setStroke(Color.GOLDENROD);
rectangle.setStrokeWidth(4.0);
return rectangle;
}
public static void main(String[] args) {
launch(args);
}
}
Thanks,
James Dunsdon
(nervous first time poster)
More information about the openjfx-dev
mailing list