gpt4 book ai didi

JavaFX:如何使底层节点可访问?

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:19 25 4
gpt4 key购买 nike

我在 StackPane 内有一个 Pane 和一个 VBox。我首先添加了 Pane ,然后在其顶部添加了 VBoxVBox 包含多个 ke,这些 ke 又具有 Button 作为子项。我使用普通的 Pane 作为“ Canvas ”来在其上定位 LineLine 以及 Button 需要具有交互性。因此,通过单击它们,它们将改变颜色。但目前 Pane 及其 Line 对象已显示,但它们被 VBox 覆盖,因此我无法与它们交互,只能与 Button 交互。

如何保证我也可以与 Line 交互,尽管它们位于 StackPane 的较低层?

最佳答案

您可以设置 pickOnBoundsProperty将容器 Node(VBoxHBox)设置为 false

Defines how the picking computation is done for this node when triggered by a MouseEvent or a contains function call. If pickOnBounds is true, then picking is computed by intersecting with the bounds of this node, else picking is computed by intersecting with the geometric shape of this node.

因此,HBoxVBox 的“透明”区域将不会注册点击事件。

示例:

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);
}
}

enter image description here

关于JavaFX:如何使底层节点可访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39549312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com