gpt4 book ai didi

java - Scene.getWindow() 总是一个舞台吗?

转载 作者:行者123 更新时间:2023-12-01 12:41:03 24 4
gpt4 key购买 nike

来自How to reference primaryStage我了解到,我可以使用 control.getScene.getWindow() 获取特定控件的 Stage,但这会返回一个 Window 而不是一个舞台。我知道 StageWindow 的一种类型,但我的问题是返回的对象是否始终是 Stage,还是其他东西在某些情况下?另外,我会知道它会是别的东西吗?

最佳答案

Window 的子类JavaFX API 中的值为 StagePopupWindowPopupWindow又是 Popup 的父类(super class), ContextMenu ,和Tooltip ,当然也可以定义自己的子类。因此,设计一个案例相当容易,其中 control.getScene().getWindow()返回的内容不是 Stage :

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.Window;

public class ContextMenuExample extends Application {

@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
Label label = new Label("Right click here");
root.getChildren().add(label);

ContextMenu contextMenu = new ContextMenu();
MenuItem menuItem = new MenuItem();
contextMenu.getItems().add(menuItem);

final Button button = new Button("Click Me");
menuItem.setGraphic(button);
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Window window = button.getScene().getWindow();
System.out.println("window is a stage: "+(window instanceof Stage));
}
});
label.setContextMenu(contextMenu);
Scene scene = new Scene(root, 250, 100);
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}

如果您使用 FXML,您可能不应该假设您的封闭 WindowStage因为您可能会重复使用 FXML 作为 Popup 的内容,或其他非Stage Window ,在未来。

关于java - Scene.getWindow() 总是一个舞台吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25095578/

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