当前位置: 首页 > 知识库问答 >
问题:

如果搜索VBox,scene.lookup()返回null

伊羽
2023-03-14

基本上,我需要从一个fxml文件中检索一个VBox,我使用的是scene.lookup。但如果我搜索它,它就会以NullPointerException崩溃。

public class Main extends Application {

    @Override
    public void start(Stage stage) throws Exception{

        FXMLLoader loader = new FXMLLoader(getClass().getResource("MainWindow.fxml"));
        Parent root = loader.load();
        Scene scene = new Scene(root, 600, 575);
        Controller controller = new Controller();
        controller.setScene(scene);
        System.out.println(scene.lookup("#vBox"));


        stage.setScene(scene);
        stage.setTitle("Test");
        stage.setResizable(false);
        stage.show();
    }

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

这是我的fxml文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<BorderPane fx:id="borderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="575.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <top>
      <ToolBar prefHeight="40.0" prefWidth="200.0" BorderPane.alignment="CENTER">
        <items>
          <Button fx:id="addBtn" mnemonicParsing="false" onAction="#addEventHandler" prefHeight="30.0" prefWidth="75.0" text="Add" />
            <Button fx:id="editBtn" mnemonicParsing="false" prefHeight="30.0" prefWidth="75.0" text="Edit..." />
            <Button fx:id="delBtn" mnemonicParsing="false" prefHeight="30.0" prefWidth="75.0" text="Delete" />
        </items>
      </ToolBar>
   </top>
   <center>
      <ScrollPane fx:id="scrollPane" prefHeight="515.0" prefWidth="600.0" BorderPane.alignment="CENTER">
         <content>
            <VBox fx:id="vBox" fillWidth="true" />
         </content>
      </ScrollPane>
   </center>
</BorderPane>

共有1个答案

晏富
2023-03-14

首先,你真的不需要这么做。只需将vbox注入到控制器中,然后在那里执行您需要对其执行的任何操作:

public class Controller {

    @FXML
    private VBox vBox ;

    public void initialize() {
        // do something with vBox...
    }
}

直接回答您的问题:

在应用CSS之前,查找将不起作用,这通常是在第一个呈现脉冲上。这将不会发生,直到舞台已经显示,最早。

@Override
public void start(Stage stage) throws Exception{

    FXMLLoader loader = new FXMLLoader(getClass().getResource("MainWindow.fxml"));
    Parent root = loader.load();
    Scene scene = new Scene(root, 600, 575);


    stage.setScene(scene);
    stage.setTitle("Test");
    stage.setResizable(false);
    stage.show();

    System.out.println(scene.lookup("#vBox"));
}

因此您可以执行以下操作:

    FXMLLoader loader = new FXMLLoader(getClass().getResource("MainWindow.fxml"));
    Parent root = loader.load();
    Map<String, Object> namespace = loader.getNamespace();
    System.out.println(namespace.get("vBox"));

另外,请注意

    Controller controller = new Controller();
    controller.setScene(scene);

什么都不做。创建新控制器与获取fxmlloader为您创建的控制器不同。(无论如何都是多余的,您总是可以在控制器中执行vbox.getScene()来获取场景。)

 类似资料:
  • 我正在用Hibernate Search 4.5.1和Spring 4.0.5版本构建一个应用程序。我正在尝试索引以下类: 我正在构建一个junit测试用例,看起来如下所示: 我还注意到在luke lucene上,一些索引词的长度最多为6个字符,例如,一首歌的艺术家是“后代”,而索引中存储的词是“the”和“offspr”。第一个可以,但第二个不应该是“后代”。为什么要截断名字?

  • 我有三个索引,它们都共享一个特定的键值对。当我用api进行全面搜索时”http://localhost:9200/_search“使用请求正文 它只返回其中两个索引的结果。我尝试使用相同的请求正文,将url更改为仅在丢失的索引中搜索”http://localhost:9200/index_name/_search“这很管用。我有什么遗漏吗? 插入所有三个索引的代码遵循相同的过程,我使用elasti

  • 问题内容: 我正在使用并希望elasticsearch返回搜索的单词而不仅仅是点击。当我搜索单词并且模糊搜索找到单词时,我想知道是谁找到了它。 数据: 查询: 该查询将返回,但不知道是否找到它。 有人知道该怎么做或一个主意吗?我希望输出为。 问题答案: 您可以为此命名查询,方法是为每个查询命名。在结果中,每个匹配都将包含一个数组,其中包含匹配的查询的名称(例如及以下)。

  • 我在Google Directions API中搜索了文档,也在网上搜索了一下,没有找到我的难题的答案。我的机构开发了一个API,可以使用transit查找出发地和目的地之间最新的可能出发点,有几个返回“无结果”错误。然而,当我手动搜索谷歌地图时,我能够返回结果。 我的Google Directions API程序发出以下查询: https://maps.googleapis.com/maps/a

  • 我用java编写了一个实用的二叉搜索树,除了一个关键的函数,搜索。我使用的逻辑是,我将检查根是否为空,然后我要搜索的术语是否等于根(所以返回根)或>根(所以搜索右子树)或 使用printlns查看正在发生的事情,我发现如果值在那里,它将通过正确的if语句(包括将BNode n设置为找到的值),但随后由于某种原因将再次通过方法(返回null)。 这个方法唯一起作用的时候是在搜索根节点的时候,这对我来

  • 当我使用MS Graph API并调用时,我会得到这个响应 {“@odata.context”:https://graph.microsoft.com/v1.0/$metadata#sites”,“value”:[]} 请求ID→cfb68a16-eb50-42ab-950c-fbfeec4Def5c 但是我可以使用有响应 {“@odata.context”:https://graph.micro