从另一个场景切换启用/禁用 MenuItem javafx?
Posted
技术标签:
【中文标题】从另一个场景切换启用/禁用 MenuItem javafx?【英文标题】:Toggle enable/disable MenuItem javafx from anohter scene? 【发布时间】:2015-11-02 13:44:02 【问题描述】:好像我从来没有从 FXML 得到正确的参考。
FXML 文件:
<MenuBar xmlns:fx="http://javafx.com/fxml/1" fx:id="rootMenu" xmlns="http://javafx.com/javafx/8"
fx:controller="my.MenuController">
<Menu mnemonicParsing="false" text="Analysis">
<MenuItem fx:id="test" mnemonicParsing="false" onAction="#startNewAnalyze" text="New analysis"/>
然后在Controller文件中:
@FXML
private static MenuItem test;
@FXML
private void initialize()
Systen.out.println(test.getText());
public static void setDisable(boolean enable)
test.setDisable(enable);
这将在调用MenuController.setDisable(false);
时给出Nullpointer
有什么想法吗?
【问题讨论】:
您可以使用fx:id
在控制器中访问它们。我想你必须意识到这一点。
您需要使用模型类在不同控制器之间共享适当的状态(在这种情况下,由于状态是视图的状态,因此将被视为视图模型)。看看***.com/questions/32342864/applying-mvc-with-javafx 是否有帮助。
请阅读***.com/help/how-to-ask 这里没有足够的信息来真正理解你在做什么。你什么时候打电话给setDisable(...)
,从哪里打电话?更改的控件在哪里定义(在边框窗格中心等)以及它们如何以及何时更改?当您禁用菜单项时会发生什么(您是否收到错误?什么都没有发生?)?考虑创建一个minimal reproducible example 并将其包含在您的问题中。
好的,发生的情况是我从未获得 MenuItem 的引用,例如在 initialize() 方法中运行 System.out.println(test.getText()) 时,我直接得到错误 nullpointerexception如上所述加载 FXML 文件。
问题是我是否会错过 fxml 或控制器中的某些内容?
【参考方案1】:
您可以制作一个 MenuBar-Controller 来访问这些项目。使用fx:id
提供您的物品和ID。
在 Controller 类中,您可以通过以下方式轻松使用变量:
@FXML
private MenuItem 'yourID';
【讨论】:
在下面查看我的答案,仍然无法访问它们:( 我是否需要以某种方式启动私有 MenuItem 测试? @Mikael:不要初始化它。FXMLLoader
应该这样做。但是在您的 fxml 中,我没有看到带有 fx:id="test"
属性的 xml 元素。因此,MenuItem
s 都没有分配给您的 private MenuItem test;
字段。
抱歉意思是 MenuItem fx:id="change" 仍然不能在初始化 () 中使用它,任何想法 hmmm以上是关于从另一个场景切换启用/禁用 MenuItem javafx?的主要内容,如果未能解决你的问题,请参考以下文章