从另一个场景切换启用/禁用 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 元素。因此,MenuItems 都没有分配给您的 private MenuItem test; 字段。 抱歉意思是 MenuItem fx:id="change" 仍然不能在初始化 () 中使用它,任何想法 hmmm

以上是关于从另一个场景切换启用/禁用 MenuItem javafx?的主要内容,如果未能解决你的问题,请参考以下文章

ios - 从另一个功能以编程方式启用按钮

切换启用/禁用本地通知(swift 4)

切换开关 - 当我启用另一个按钮时禁用一个按钮

使用 jquery 切换 LinkBut​​ton 的启用/禁用状态

在启用和禁用广告之间切换,IDFA 问题

在黄瓜测试中切换功能标志值