Text javafx绘制线条和文本

Text javafx绘制线条和文本,text,line,javafx-2,lines,Text,Line,Javafx 2,Lines,我在JavaFx中绘制线条时遇到问题。我们正在制作一个模拟交通的应用程序——共有16条街道,根据交通情况,每条街道都有不同的颜色。这里有一幅非常简单的图画: 我的第一个想法是把街道画成线,然后简单地改变它的颜色。但是我不能把文字放在行上(我想要一个带有街道名称的文字)。所以我试着在StackPane上放一行和一个文本。然后我在边框窗格中心添加了StackPanes。。。但它不起作用。似乎StackPane不尊重行的开始x,开始y。。。这些线相互重叠 应用程序的主窗格是BorderPane,我想

我在JavaFx中绘制线条时遇到问题。我们正在制作一个模拟交通的应用程序——共有16条街道,根据交通情况,每条街道都有不同的颜色。这里有一幅非常简单的图画:

我的第一个想法是把街道画成线,然后简单地改变它的颜色。但是我不能把文字放在行上(我想要一个带有街道名称的文字)。所以我试着在StackPane上放一行和一个文本。然后我在边框窗格中心添加了StackPanes。。。但它不起作用。似乎StackPane不尊重行的开始x,开始y。。。这些线相互重叠

应用程序的主窗格是BorderPane,我想在中间放一张地图。它不需要动态调整大小,我们只有一个地图,所以可以静态定位

我需要这样的东西: 但是街道需要相互连接。。。就像第一张照片一样

你对怎么做有什么建议吗? 任何提示都将不胜感激:)

就像这样:

Group gr = new Group();    
Text text = new Text("1st Street");  
text.setFill(Color.web("fabbff"));
Line line = new Line(0, 150, 200,150);   
line.setStrokeWidth(20); 
line.setStroke(Color.web("000000")); 
gr.getChildren().addAll(line, text);
group.getChildren().addAll(gr, //and every other street);
默认情况下,您使用的将所有内容置于StackPane的中心,而这不是您想要的

不要使用StackPane,而是使用普通(如果需要CSS设置窗格样式,或者在调整窗格大小时需要调整窗格中控件的大小),否则,请使用。当您声明正在绘制的地图不需要动态调整大小时,可能只需要一个组就可以了

项目在组或窗格的子列表中的放置顺序将决定项目的呈现顺序。首先添加到列表中的项目将首先呈现,最后添加到列表中的项目将呈现在首先添加的项目之上。所以,首先将街道线条添加到窗格或组中,然后在街道顶部添加(或)

另一种选择是使用直接绘制,但对于您的应用程序,在窗格或组中使用场景图对象可能是更好的方法

使用一个窗格/组,首先添加所有街道,然后添加所有名称,或者一个窗格/组用于所有街道,另一个窗格/组用于所有街道名称。单独的窗格可能很好,因为您可以根据需要通过在“街道名称”组上设置可见标志来切换街道名称的可见性。不要对街道及其名称同时使用一个组,然后尝试将多个street+streetname组层叠在一起,否则在十字路口,一些街道名称将被其顶部的街道遮挡

当我画一条线时,我可以指定位置x,y,但我不能设置文本或标签的位置。。。或者我可以吗


除了通过在创建线时为线提供坐标来定位线外,还需要定位文本,以便文本显示在线的顶部。您可以使用该方法在给定位置定位文本。

我知道这是一个旧线程。但是,我有同样的问题:如何向线条添加标签,以防止线条向四周移动。此代码适用于我:

line = new Line();
line.startXProperty().bind(source.layoutXProperty().add(source.getBoundsInParent().getWidth() / 2.0));
line.startYProperty().bind( source.layoutYProperty().add(source.getBoundsInParent().getHeight() / 2.0));

line.endXProperty().bind( target.layoutXProperty().add( target.getBoundsInParent().getWidth() / 2.0));
line.endYProperty().bind( target.layoutYProperty().add( target.getBoundsInParent().getHeight() / 2.0));


label.layoutXProperty().bind(line.endXProperty().subtract(line.endXProperty().subtract(line.startXProperty()).divide(2)));
label.layoutYProperty().bind(line.endYProperty().subtract(line.endYProperty().subtract(line.startYProperty()).divide(2)));

getChildren().addAll( line, label);

每个街道都需要有自己的组(街道+文本),对吗?然后我需要将这些组集合到另一个大组中,并将这些组放入边框窗格中?但是当我试着这样做的时候,文本和行在不同的地方。。。我在第一篇文章中添加了一个代码-这是你的意思吗?更新的答案进一步解释了其中的一些概念。谢谢!!!好的,我明天就试试。但当我画一条线时,我可以指定位置x,y,但我不能设置文本或标签的位置。。。或者我可以吗?我尝试了:group.getChildren().addAll(text,line//and every other street},文本位于街道以外的其他位置