【问题标题】:jMenu bar in Java Swing not enabling issueJava Swing 中的 jMenu 栏未启用问题
【发布时间】:2013-12-08 03:10:20
【问题描述】:

我有一个 jMenu 栏,默认情况下它是启用的。在选择第一项时,我禁用了 jMenu

这是第一个菜单项的代码。基本上ViewCustomerAccountsDetails 是一个 jInterframe :-

       ViewCustomerAccountsDetails vca = new ViewCustomerAccountsDetails();
        this.jDesktopPane1.add(vca);
        vca.show();
        jMenu1.setEnabled(false);

现在,在ViewCustomerAccountsDetails 类中,我有一个按钮,点击它时,我隐藏了这个 JInternal 框架和 尝试启用 jMenu 栏:-

    CustomerMainScreenLogin cmsl = new CustomerMainScreenLogin();
    cmsl.jMenu1.setEnabled(true); //jMenu is public
    this.dispose();

但它不起作用。它仍然被禁用。

【问题讨论】:

  • 您是否遇到任何错误?你的jMenu1是公共静态的吗?
  • @Prasad - 正如我上面提到的,它是公开的,但不是静态的
  • 为什么不用 JPanel 而不是 JInternalFrame?
  • 我说的是菜单项而不是容器
  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing jmenu jmenubar


【解决方案1】:

这里:

CustomerMainScreenLogin cmsl = new CustomerMainScreenLogin(); // A new instance? Why?
cmsl.jMenu1.setEnabled(true); //Here jMenu1 references the new instance menu 1, not the current one's.
this.dispose();

为什么要创建CustomerMainScreenLogin 类的新实例?很可能jMenu1 已启用,但在一个新的不可见CustomerMainScreenLogin 对象中。要使其可见,只需调用cms1.setVisible(true),您就会看到。

所以你需要引用CustomerMainScreenLogin 类的当前实例而不是创建一个新实例。例如,将jMenu1 设为静态并以这种方式调用jMenu1.setEnabled(true)

CustomerMainScreenLogin.jMenu1.setEnabled(true);
this.dispose();

【讨论】:

  • 你是对的。最好不要将它们设置为静态。在我的情况下,一些全局静态变量不会响应我的 setEnabled(true) 调用,而通过 getter,其他私有成员会。只需使用私有成员并调用 getter/setter。谢谢!
【解决方案2】:

我不完全确定在哪里,但可能需要一个 invokeLater。这稍后会完成繁重的工作,并允许事件队列线程处理所有事件,例如快速单击按钮并保持响应和反应 - 就像启用菜单一样。

    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            jMenu1.setEnabled(false);
        }
    }
    vca.show();

    cmsl.jMenu1.setEnabled(true);
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            dispose();
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    相关资源
    最近更新 更多