当前位置: 首页 > 知识库问答 >
问题:

何时使用translate和何时重新定位-translate和布局坐标之间的区别是什么?

子车轶
2023-03-14

为了移动节点,什么时候使用转换,什么时候重新定位?在一天结束时,他们似乎做了同样的事情(视觉上);移动节点;第一种方法是对原点进行翻译(x,y保持不变),第二种方法是改变x,y的coords。所以假设我想移动屏幕中特定点上的一个节点…我应该使用node.relocate(x,y)还是node.setTranslatex(x),node.setTranslatey(y)?

为了说明我的意思,我做了一个你可以玩的示例程序:屏幕上的一个矩形,它的位置由4个滑块决定(其中2个控制布局x,y,另外两个控制平移x,y)。

/* imports are missing */  
public class TransReloc extends Application{
    @Override
    public void start(Stage primaryStage) throws Exception {
        Group root = new Group();
        Rectangle rect = new Rectangle(100, 50, Color.BLUE);
        root.getChildren().add(rect);
        VBox controlGroup = new VBox();
        Slider relocX = new Slider(-100, 100, 0 );
        Slider relocY = new Slider(-100, 100, 0 );
        Slider transX = new Slider(-100, 100, 0 );
        Slider transY = new Slider(-100, 100, 0 );
        rect.layoutXProperty().bind(relocX.valueProperty());
        rect.layoutYProperty().bind(relocY.valueProperty());
        rect.translateXProperty().bind(transX.valueProperty());
        rect.translateYProperty().bind(transY.valueProperty());
        controlGroup.getChildren().addAll(relocX, relocY, transX, transY);
        root.getChildren().add(controlGroup);
        controlGroup.relocate(0, 300);
        Scene scene  = new Scene(root, 300, 400, Color.ALICEBLUE);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

共有1个答案

谷翰飞
2023-03-14

Layout坐标由布局管理器使用,如StackPane或VBox来控制它们的子位置。组(和窗格)将子布局留给开发人员,因此与translate功能没有区别。

因此,通常您应该只更改translate坐标以进行精细的位置调优,而将layout留给布局管理器(实际上,您不能为非组/窗格布局管理器中的节点更改layoutX和layoutY)

例如,尝试运行下一个代码和调整大小窗口,查看StackPane如何重新计算layoutbounds

public void start(Stage primaryStage) throws Exception {
    StackPane root = new StackPane();
    Rectangle rect = new Rectangle(100, 50, Color.BLUE);
    root.getChildren().add(rect);
    Scene scene  = new Scene(root, 300, 300, Color.ALICEBLUE);

    rect.layoutXProperty().addListener( (e) -> {
        System.out.println(rect.getLayoutX() + ":" + rect.getLayoutY());
            });

    primaryStage.setScene(scene);
    primaryStage.show();

}
 类似资料:
  • 问题内容: res.location()方法的用途是什么?我可以使用res.redirect()重定向到特定的URL,如果在res.redirect()之前使用res.location(),则看不到任何更改。 问题答案: 它们的描述非常相似,但功能更多。看到差异的最简单方法是查看源代码。 只需设置响应头即可。它不会设置响应状态代码或关闭响应,因此您可以根据需要编写响应正文,然后必须自己调用。 另一

  • 我正在制作一个程序,并使用用户输入。当我得到一个字符串时,我总是使用. nextLine(),但我也使用了. Next(),它做同样的事情。有什么区别呢? 有什么区别?

  • 问题内容: 我已经对Stack Overflow进行了彻底的搜索,但是找不到此问题的答案。我正在尝试使用适用于Python(3.6.2)的GoogleTranslate API(googletrans2.2.0),并试图将一组非英语文档翻译成英语。我让GoogleTranslate进行语言检测。这是我的代码: 我每次都要等待10秒,从而限制了对API的调用。我也一次只喂API 15k个字符,以保持

  • 类的这两种方法之间有什么区别: 和 文档并不能清楚地区分它们之间的区别。

  • 在Java 7之前,JVM内存中有一个名为PermGen的区域,JVM以前在这里保存它的类。在Java 8中,它被移除并被称为元空间的区域所取代。 PermGen和Metaspace之间最重要的区别是什么? 我知道的唯一区别是,并且忽略了VM参数。

  • 和之间有什么区别? 是什么原因导致他们被扔?如何解决这些问题? 在修改现有代码以包含新的jar文件时,我经常会遇到这些可抛物。我在通过WebStart发布的一个Java应用程序的客户端和服务器端都碰到了它们。 我遇到的可能原因是: 代码客户端的中未包含的包 我们正在使用的新JAR缺少运行时类路径 版本与以前的JAR冲突 当我今天遇到这些问题时,我会采取跟踪和错误的方法来使事情正常工作。我需要更多的