我在 JavaFx 中绘制线条时遇到问题。我们正在制作一个模拟交通的应用程序 - 有 16 条街道,每条街道都有不同的颜色,具体取决于交通情况。有一张很简单的图:
http://img546.imageshack.us/img546/9949/uliceu.jpg
我关于如何做到这一点的第一个想法是将街道绘制为线条并简单地改变它的颜色。但我不能在行上放文字(我想要一个带有街道名称的文字)。所以我试图在 StackPane 上放一行和一个文本。然后我在 BorderPane 中心添加了 StackPanes ......但它没有用。似乎 StackPane 不尊重行的起始 x、起始 y...这些行彼此重叠。
该应用程序的主 Pane 是 BorderPane,我想在中心放置一张 map 。它不需要动态调整大小,我们只有一张 map ,所以它可以以静态方式定位。
我需要这样的东西:
http://img834.imageshack.us/img834/1157/ulicac.jpg
但是街道需要相互连接......就像第一张图片
你对如何做到这一点有什么建议吗?
任何提示将不胜感激:)
像那样:
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 的中心,这不是您想要的。
使用普通 Pane 代替 StackPane (如果您需要对 Pane 设置 CSS 样式或在调整 Pane 大小时调整 Pane 中的控件大小),否则,请使用 Group .当您声明您正在绘制的 map 不需要动态调整大小时,也许只是一个组就可以了。
项目在组或 Pane 的子列表中的放置顺序将决定项目的呈现顺序。首先添加到列表中的项目将首先呈现,最后添加到列表中的项目将呈现在首先添加的项目之上。因此,您首先将街道线添加到您的 Pane 或组,然后添加 Text (或 Labels )在街道顶部。
另一种选择是使用直接绘制 Canvas ,但是,对于您的应用程序,在 Pane 或组中使用场景图对象可能是更好的方法。
使用一个 Pane /组,首先添加所有街道,然后添加所有名称,或者使用一个 Pane /组添加所有街道,另一个添加所有街道名称。单独的 Pane 可能会很好,因为您可以根据需要通过在街道名称组上设置可见标志来切换街道名称的可见性。不要为一条街道及其名称使用一个组,然后尝试将多个街道+街道名称组彼此叠加,否则在交叉路口,一些街道名称将被它们顶部的街道所掩盖。
when I draw a line I can specify position x,y, but I can't set position of Text or Label... or can I?
除了通过在创建线条时为其提供坐标来定位线条之外,您还需要定位文本以使其显示在线条的顶部。您可以使用 text.relocate(x, y)在给定位置定位文本的方法。
关于text - javafx 绘制线条和文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14780228/