JavaFx:parent.lookup 返回 null

2024-03-19

我使用osgi+cdi,我有以下代码:

Parent parent=null;
FXMLLoader fxmlLoader=getFxmlLoader();
try {
    parent = (Parent)fxmlLoader.load(getFxmlStream("tasklist.fxml"));
} catch (IOException ex) {
    Logger.getLogger(TestGoView.class.getName()).log(Level.SEVERE, null, ex);
}
ComboBox comboBox=(ComboBox) parent.lookup("#testComboBox");
if (comboBox==null){
    System.out.println("COMBOBOX NULL");
}else{
    System.out.println("COMBOBOX NOT NULL");
}

我有以下tasklist.fxml

<VBox maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="440.0" prefWidth="757.0" xmlns="http://javafx.com/javafx/8.0.60-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.techsenger.testgo.core.adm.task.list.TaskDirListController">
   <children>
      <HBox>
         <children>
            <ToolBar maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" nodeOrientation="RIGHT_TO_LEFT" HBox.hgrow="SOMETIMES">
               <items>
                  <ComboBox fx:id="testComboBox" maxWidth="1.7976931348623157E308" nodeOrientation="LEFT_TO_RIGHT" />
               </items>
            </ToolBar>
         </children>
      </HBox>
   </children>
</VBox>

然而parent.lookup("#testComboBox")返回null。怎么解释呢?我已经核对过好几次身份证号码了。


您可以将所需的逻辑放入您的代码中,而不是使用仅在渲染场景后才起作用的查找控制器类 http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html#controllers。您可以通过注释将 FXML 文件中的元素注入到控制器类中@FXML.

public class TaskDirListController {

    @FXML
    private ComboBox<...> testComboBox ;

    public void initialize() {
        System.out.println(testComboBox);
    }

    // ...
}

查找通常不可靠,我建议避免使用它们。如果您确实需要从控制器以外的类访问 FXML 文件中定义的内容,那么首先要做的就是考虑重新组织事物,以便您不需要这样做:这确实表明您的整体设计是错误的。

如果您出于某种原因确实需要这个,最好使用FXMLLoader's namespace比查找:

Parent parent=null;
FXMLLoader fxmlLoader=getFxmlLoader();
try {
    parent = (Parent)fxmlLoader.load(getFxmlStream("tasklist.fxml"));
    ComboBox<?> comboBox = (ComboBox<?>) fxmlLoader.getNamespace().get("testComboBox");
    System.out.println(comboBox);
} catch (IOException ex) {
    Logger.getLogger(TestGoView.class.getName()).log(Level.SEVERE, null, ex);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFx:parent.lookup 返回 null 的相关文章

随机推荐