我正在使用带有中心窗格的边框窗格--VBox。 VBox包含一个GridPane和一个VBox窗格。
VBox(VBox中的那个)最初被设置为不可见。
我想要做的是如果GridPane的一个元素,即grid [x] [y]被悬停,以将VBox的状态更改为可见。
这是我使用的代码。临时是Vbox
grid_map[19][19].hoverProperty().addListener((ObservableValue<?
extends Boolean> observable, Boolean oldValue, Boolean show) -> {
if (show) {
temporary.setLayoutX( grid_map[19][19].getLayoutX()); // this is not really working
temporary.setVisible(true);
} else {
temporary.setVisible(false);
// grid_map[19][19].get
}
});
它正常工作,但它在网格的底部显示VBox。我想要做的是获取悬停元素的坐标,并在该元素或其左侧或右侧显示VBox。我怎么能这样做?
答案 0 :(得分:2)
告诉“外部”Vbox
不要为您定位临时vbox:
temporary.setManaged(false);
然后设置您当前正在进行的layoutX
和layoutY
应该有效。
您可能需要调整临时vbox的大小,如下所示:
grid_map[19][19].hoverProperty().addListener((observable, oldValue, show) -> {
if (show) {
double x = grid_map[19][19].getLayoutX();
double y = grid_map[19][19].getLayoutY();
double w = temporary.prefWidth(-1);
double h = temporary.prefHeight(w);
temporary.resizeRelocate(x, y, w, h);
temporary.setVisible(true);
} else {
temporary.setVisible(false);
}
});