2013-02-28 40 views
1

在自定义的JavaFX UI控件中,我想在控件的角落放置一些文本。下面是我的皮肤类的源代码:JavaFX Text构造函数与重定位

double width = control.getWidth(); 
double height = control.getHeight(); 

Text test1Text = new Text(0, 0, "top left"); 
Text test2Text = new Text(0, height-1, "bottom left"); 
Text test3Text = new Text("top right"); 
test3Text.relocate(width - test3Text.getLayoutBounds().getWidth(), 0); 
Text test4Text = new Text("bottom right"); 
test4Text.relocate(width - test4Text.getLayoutBounds().getWidth(), height-1); 

不幸的是,它似乎有所作为,我是否在给定的坐标构建文本还是我构建它没有坐标和定位它在之后放置:

  • 在第一种情况下,构造函数中的坐标将是文本的左下角坐标。
  • 在第二种情况下,给定的坐标将是左上角的坐标。

这种奇怪行为的任何想法?

回答

3

Text正在从(0,0)位置向右和向上绘制。例如。如果你创建new Text("Hello"),并要求其界定你会发现它们有负面纵坐标[minX:0.0, minY:-12.94921875]

原因恕我直言,是未来:Text正在制定中的控件,他们更关心的文本基线。想象一下,2个按钮与文字“水”和“水” - 你真的希望他们通过基线对齐而不是左上角:

从另一个侧面enter image description here

relocate()方法适用于一常规Node s,并操作总是为左上角计算的布局。

+0

这听起来很合理。非常感谢! – winne2 2013-03-01 15:02:58

+2

补充说明:实际上,可以通过setTextOrigin设置文本坐标系的原点:http://docs.oracle.com/javafx/2/api/javafx/scene/text/Text.html#setTextOrigin%28javafx。 geometry.VPos%29 您可以自行决定是否偏好相对于文本左上角,左下角,中心左侧或基线左侧的坐标。 – winne2 2013-03-07 13:38:53

1

由于JavaFX的已开放,发布了其大部分的零件,这里是两个代码(JavaFX的8)
javafx.scene.text.Textjavafx.scene.Node
我不能深入研究,但很明显的是,Text constructorNode#relocate()都在做不同的事情:
文本构造

public Text(double x, double y, String text) { 
    this(text); 
    setX(x); 
    setY(y); 
} 

节点#移居()

public void relocate(double x, double y) { 
     setLayoutX(x - getLayoutBounds().getMinX()); 
     setLayoutY(y - getLayoutBounds().getMinY()); 

     PlatformLogger logger = Logging.getLayoutLogger(); 
     if (logger.isLoggable(PlatformLogger.FINER)) { 
      logger.finer(this.toString()+" moved to ("+x+","+y+")"); 
     } 
} 

这是所有我的想法,对不起。

+0

感谢您指点我的源代码!我希望Java 8能够改善整个情况...... – winne2 2013-03-04 08:34:34