Parent root = FXMLLoader.load(getClass().getResource("../layouts/main_window.fxml"));
primaryStage.setTitle("IMGManager");
primaryStage.setScene(new Scene(root));
primaryStage.show();
<VBox id="navigation" stylesheets="@../../css/center_panels.css"
xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="controllers.NavigationController">
<!-- ... -->
<!-- List -->
<AnchorPane prefHeight="1500.0" prefWidth="492.0">
<children>
<ListView id="directories-list"
fx:id="navigationList"
prefHeight="500.0" ... />
</children>
</AnchorPane>
</VBox>
public class NavigationController implements Initializable {
@FXML private ListView<String> navigationList;
// ...
@Override
public void initialize(URL location, ResourceBundle resources) {
// Get Home Directory
FileSystemView fsw = ...
// Updates the information displayed in the Navigation panel.
if (navigationList != null)
{
updateNavigationDisplay();
}
}
// ...
}
嗨,我遇到的问题是:
1。 )
每当我尝试链接JavaFX组件和Controller变量时,Scene Builder和Intellij都不会建立&#34;连接&#34;在fx:id(s)和我的控制器中的变量之间。
我总是在Controller的初始化中得到nullPointerError,但是我找到了一个(麻烦的)解决方法:
if (navigationList != null)
。我注意到我的初始化方法会触发两次。一旦使用null组件并且第二次(魔术),就会检测到组件。因此,通过添加
if (navigationList != null)
,我不会在第一次初始化时遇到任何错误,而在第二次初始化时我会做很酷的事情。2。 )
我无法访问位于另一个FXML文件中的组件,然后访问与Controller链接的组件:nullPointer。
例如:
Controller1&lt; - 与此链接,效果很好(在第二个初始化...) - &gt; FXML1.fxml
Controller1 - 尝试访问 - &gt;中的组件FXML2.fxml(悲惨地失败)
编辑:
通过&#34;尝试访问另一个fxml文件中的组件&#34;,我的意思是用鼠标点击或类似的东西 - &gt;并且肯定不是在初始化期间,因为一些fxml文件尚未加载。
我搜索了大量的答案,并在此上失去了几个小时。大多数情况下,通过纠正一些小的拼写错误,或者缺少@FXML标签或添加适当的Intializable接口实现等来解决smilar案例。
在我的情况下,我真的不明白。希望它只是一个拼写错误或一些小错误。
感谢您的回答
答案 0 :(得分:1)
问题1:您是否直接在main_window.fxml中添加了FXML,或者您已将此FXML包含在main_window.fxml中?
问题2:要通过第一个fxml的控制器访问另一个fxml中的组件,请参考以下链接: https://www.youtube.com/watch?v=NgubWgheboI
我遇到了同样的问题。:)
答案 1 :(得分:0)
在fxml文件中尝试使用 fx:id = 代替 id = 。此解决方案对我有效。