节点在javafx中的坐标

时间:2015-07-10 19:25:29

标签: javafx javafx-2 javafx-8

我有一个问题..好吧,我使用此代码来获取节点的坐标

Bounds localToScreen = myNode.localToScene(myNode.getBoundsInLocal());
localToScreen.getMinX();
localToScreen.getMinY();
localToScreen.getWidth();
localToScreen.getHeight();

但是这段代码有时会起作用,而在其他时候它会显示错误的结果..那么使用这段代码有什么特别之处吗?为什么它不能随时工作?在scenebuilder中,所有节点的坐标都是正确的。

这是一个例子

我的fxml文件是

 <?xml version="1.0" encoding="UTF-8"?>

   <?import java.lang.*?>
   <?import java.util.*?>
   <?import javafx.scene.*?>
   <?import javafx.scene.control.*?>
   <?import javafx.scene.layout.*?>


   <AnchorPane fx:id="anchor" maxHeight="-Infinity" maxWidth="-Infinity"        minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"   xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="test.FXMLDocumentController">
     <children>
      <HBox fx:id="hbox" layoutX="147.0" layoutY="67.0" prefHeight="34.0" prefWidth="200.0">
         <children>
            <TextField />
            <Button mnemonicParsing="false" text="Button" />
         </children>
      </HBox>
   </children>
</AnchorPane>

我的控制器是 公共类FXMLDocumentController实现Initializable {

@FXML
private AnchorPane anchor;
@FXML
private HBox hbox;

/**
 * Initializes the controller class.
 */
@Override
public void initialize(URL url, ResourceBundle rb) {

    Bounds localToScreen = hbox.localToScene(hbox.getBoundsInLocal());
    System.out.print(""+
    localToScreen.getMinX() +"  "+
    localToScreen.getMinY() +"  "+
    localToScreen.getWidth()+"   "+
    localToScreen.getHeight()
    );
    // TODO
}

结果是

147.0  67.0  0.0   0.0

宽度和高度不应为0!

请帮助..谢谢

0 个答案:

没有答案