[英]JavaFX: How to make the underlaying Node accessable?
我在StackPane
有一個Pane
和一個VBox
。 我首先添加了Pane
並在其上添加了VBox
。 VBox
包括幾個kes,而這些kes又將Button
作為孩子。 我使用普通的Pane
作為“畫布”來定位Line
s。 Line
和Button
需要是交互式的。 因此,通過點擊它們,它們將例如改變它們的顏色。 但是現在顯示了Pane
及其Line
對象,但它們被VBox
覆蓋,因此我無法與它們交互,只能與Button
交互。
我怎么能提供我也可以與Line
交互,雖然它們位於StackPane
的較低層?
它們被覆蓋因為VBOX在Pane前面。
第一種方式:
您可以setVisible(false)
VBox,以便可以訪問窗格,然后再次設置VBox可見setVisible(true)
。
第二種方式:
您可以使用名為toBack();
方法toBack();
和toFront();
並將Node
返回或前置到層次結構中:
vBox.toBack(); //the the vBox goes back to the hierarchy,it is like zOrder in html
然后使用:
vBox.toFront(); //to bring the vBox again in front.
最后:
你可以在某處提供一個ToggleButton
,當按下時, VBox
出現,當沒有按下時, VBox
就消失了。
您可以將容器Node
( VBox
和HBox
)的pickOnBoundsProperty
設置為false
。
定義在MouseEvent或contains函數調用觸發時如何為此節點執行拾取計算。 如果pickOnBounds為true,則通過與此節點的邊界相交來計算拾取,否則通過與此節點的幾何形狀相交來計算拾取。
因此, HBox
和VBox
“透明”區域將不會注冊click事件。
例:
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
Pane pane = new Pane();
pane.setStyle("-fx-background-color:red;");
StackPane sp = new StackPane();
VBox vbox = new VBox();
HBox hbox = new HBox();
hbox.setSpacing(30);
for (int i = 0; i< 5; i++) {
Button b = new Button("Button");
b.setOnAction(e -> System.out.println("Button clicked"));
hbox.getChildren().add(b);
}
vbox.getChildren().add(hbox);
sp.getChildren().addAll(pane, vbox);
Line line = new Line(10, 10, 500, 10);
line.setStrokeWidth(3);
pane.getChildren().add(line);
line.setOnMouseClicked(e -> {
System.out.println("Line Clicked!");
});
// Set pickOnBounds to vbox and hbox
vbox.setPickOnBounds(false);
hbox.setPickOnBounds(false);
root.setCenter(sp);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.