我正在尝试在JavaFX中可视化一个图形。节点应该是交互式的。目前我有一个VBox,并根据我在图形中需要的级别将尽可能多的HBox放入其中。所有HBox都设置为将其子节点定位为中心。子节点代表单个节点,是按钮。VBox本身被放置在StackPane中,Canvas作为StackPane的另一个子节点。然后将此StackPane放置到场景中。我想使用Canvas来绘制节点之间的连接边缘。要获取我使用的节点的坐标:
System.out.println(button.localToScene(button.getBoundsInLocal().getMinX(),
button.getBoundsInLocal().getMinY()));
但无论按钮位于何处,结果坐标仍为:
Point2D [x = 0.0, y = 108.0]
所有的按钮。虽然显示正确,但每个按钮显然都有相同的坐标!
请帮帮我,我现在很绝望。。。
编辑:
下面是最简单的例子:
Main.java
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
VBox root = new VBox();
HBox buttons = new HBox();
TabPane tabs = new TabPane();
buttons.getChildren().addAll(
new Button("1"),
new Button("2"),
new Button("3"));
tabs.getTabs().addAll(
new TabBoxes("____A____"),
new TabBoxes("____B____"),
new TabBoxes("____C____")
);
root.getChildren().addAll(buttons, tabs);
primaryStage.setScene(new Scene(root, 500, 400));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
TabBoxes.java
public class TabBoxes extends Tab {
private VBox vBox = new VBox();
private ArrayList<HBox> hBoxes;
private Canvas canvas = new Canvas();
private StackPane stack = new StackPane();
private static final int V_INIT_SPACING = 60;
private static final int V_SPACING = 60;
private static final int H_SPACING = 60;
TabBoxes(String s){
super(s);
this.html" target="_blank">setContent(stack);
setClosable(false);
stack.getChildren().add(canvas);
stack.getChildren().add(vBox);
canvas.setWidth(2000);
canvas.setHeight(1080);
hBoxes = new ArrayList<>();
vBox.setSpacing(V_SPACING);
vBox.translateYProperty().set(V_INIT_SPACING);
for (int i = 0; i < 5; i++) {
hBoxes.add(new HBox() {
{
setSpacing(H_SPACING);
setAlignment(Pos.CENTER);
}
});
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j <= i; j++) {
hBoxes.get(i).getChildren().add(new Button(i + "||" + j){
{
setPrefSize(100,60);
setOnAction(e-> System.out.println("My coordinates are: " + localToScene(getBoundsInLocal().getMinX(),getBoundsInLocal().getMinY())));
}
});
}
}
vBox.getChildren().addAll(hBoxes);
}
}
< code>boundsInLocal是< code >按钮自己的坐标系中的坐标。这些值是相同的,这并不奇怪。< br >如果要计算< code>Canvas坐标系中的坐标,请将坐标转换为< code>StackPane坐标,然后将坐标转换为< code>Canvas坐标:
Node n = button;
Point2D p = new Point2D(button.getBoundsInLocal().getMinX(), button.getBoundsInLocal().getMinY());
while (n != stackPane) {
p = n.localToParent(p);
n = n.getParent();
}
p = canvas.parentToLocal(p);
问题内容: 我使用boto3连接到AWS的代码遇到错误。该错误仅在昨天下午开始,在上一次我没有收到错误和第一次我得到错误之间,我看不到任何变化。 错误是: 在.aws / config中,我有: 这是我所知道的: 在另一台机器上使用相同的AWS凭证和配置,我看不到错误。 在同一台计算机上使用不同的AWS凭证和配置,我确实看到了错误。 我是我们小组中唯一在任何计算机上出现任何凭据问题的人。 我不认为
我试图找出鼠标在哪里,就GridPane的列和行而言。我知道鼠标的位置,所以如果我知道每个单元格的宽度和高度(我认为这不是一个简单的方法来计算),我大概可以从中算出它,但是我看到的大多数代码似乎都假设鼠标在一个节点上GridPane内部: 但是实际上我的GridPane里面没有任何东西,所以我只得到整个GridPane。现在,我想我可以为每个单元添加节点,但这似乎效率低下。(这个想法是用户将节点放
问题内容: 我发现(0,0)映射到屏幕的左上角有点不直观。在Java Swing中使用左手坐标系是否有历史原因? 虽然将其映射到右手系统并不难,但我很好奇,知道使用左手系统是否有任何隐藏的好处。 问题答案: 根据这篇文章,这仅仅是因为这是电视机一直使用的方式(BTW并没有改变)。因此,这个早期的设计决策似乎今天仍然会产生影响。 早期的家用计算机通常连接到电视,因此自然会使用此坐标系。我猜想很多显示
问题内容: 我偶尔会看到像这样的Python代码中使用的列表切片语法: 当然,这与以下内容相同: 还是我错过了什么? 问题答案: 就像NXC所说的,Python变量名实际上指向一个对象,而不是内存中的特定位置。 会创建两个指向同一对象的不同变量,因此,更改也会更改。 但是,当您这样做时,它将“切片”列表,并创建一个新列表。的默认值为0,并且位于列表的末尾,因此它将复制所有内容。因此,它使用第一个中
我们在Azure应用程序服务计划中遇到CPU峰值,没有明显的原因。这并不是停止服务的原因,但我们想知道什么时候 例如,CPU百分比连续几天保持在0-1%的范围内,但突然它飙升到98%, 45%, 60%并很快回到0-1%的范围内。内存保持在舒适的40-45%水平不变,没有传入请求,没有Web作业,日志中没有异常,没有故障,服务健康正常,没有我们可以指出的原因。我们试图通过kudu找到答案 该应用程
我的代码: 打印: 我的问题是:当我得到btn1的坐标时,MinX和MinY是0,我能理解。但对于btn2,MinY不应为0;MaxX和MaxY也不应该是0。那么,如何在VBox中获取按钮左角的真实坐标呢。为了清楚起见,我需要节点相对于VBox的坐标。谢谢