明确定位一个窗格

时间:2015-02-09 18:50:19

标签: java javafx

我正在尝试使用JavaFX创建一个基本的UML图表工具。

首先我这样做了:

public class Asd extends Application {
    Double WINDOW_HEIGHT = (double) 400;
    Double WINDOW_WIDTH = (double) 800;
    Double RECTANGLE_DEFAULT_HEIGHT = (double) 50;
    Double RECTANGLE_DEFAULT_WIDTH = (double) 100;


    @Override
    public void start(Stage stage) throws Exception {
        final Pane root = new Pane();
        Rectangle background = new Rectangle(WINDOW_WIDTH, WINDOW_HEIGHT,
                Color.WHITE);
        root.getChildren().add(background);
        Scene scene = new Scene(root, WINDOW_WIDTH, WINDOW_HEIGHT);
        // On window click
        root.setOnMousePressed(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent mouseEvent) {
                Rectangle rect = new Rectangle();
                rect.setX(mouseEvent.getX());
                rect.setY(mouseEvent.getY());
                rect.setWidth(RECTANGLE_DEFAULT_WIDTH);
                rect.setHeight(RECTANGLE_DEFAULT_HEIGHT);
                rect.setFill(null);
                rect.setStroke(Color.BLACK);
                root.getChildren().add(rect);
            }
        });
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}

有了这个,我可以在我点击的确切点画一个矩形(代表一个UML类)。

现在我要添加文字。如果不是

root.getChildren().add(rect);

我做

Text text = new Text("mockText");
StackPane stackPane = new StackPane();
stackPane.getChildren().addAll(rect, text);
root.getChildren().add(stackPane);

文本位于矩形的中心,但所有矩形都位于坐标(0,0)

那么,有什么方法可以改变每个StackPane的位置?或者在不使用StackPane的情况下直接向矩形添加文本的任何替代方法?

1 个答案:

答案 0 :(得分:0)

好的,明白了。布局元素有方法setLayoutX&amp; setLayoutY可以在像这样的情况下使用,所以我不再需要Rectangle.setX / setY&amp;最后句柄方法应该是:

public void handle(MouseEvent mouseEvent) {
    Rectangle rect = new Rectangle();
    rect.setWidth(RECTANGLE_DEFAULT_WIDTH);
    rect.setHeight(RECTANGLE_DEFAULT_HEIGHT);
    rect.setFill(null);
    rect.setStroke(Color.BLACK);
    Text text = new Text("mockText");
    StackPane stackPane = new StackPane();
    stackPane.getChildren().addAll(rect, text);
    stackPane.setLayoutX(mouseEvent.getX());
    stackPane.setLayoutY(mouseEvent.getY());
    root.getChildren().add(stackPane);
}