JMenuBar禁用后不启用

2024-04-02

我正在禁用JMenuBar在显示之前FileDialog(因为当FileDialog可见)使用getJMenuBar().setEnabled(false)然后打电话getJMenuBar().setEnabled(true)之后FileDialog关闭,但菜单项在启用后不会变为活动状态 - 如果我更改为另一个应用程序并返回到我的应用程序,它们就会变为活动状态。我试过打电话getJMenuBar().revalidate() and/or getJMenuBar().repaint()无济于事。

值得注意的是,我使用的是屏幕菜单栏,就像在 OS X 上一样。显示问题的示例代码:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener;

public class MenuTest extends JFrame implements ActionListener {

    private JMenuItem menuItemNew = new JMenuItem("New");
    private JMenuItem menuItemOpen = new JMenuItem("Open");
    private JMenuItem menuItemSave = new JMenuItem("Save");
    private JMenu menuFile = new JMenu("File");
    private JMenuBar menuBar = new JMenuBar();

    public MenuTest() {
        super("JMenu Test");
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        menuItemOpen.addActionListener(this);

        menuFile.add(menuItemNew);
        menuFile.add(menuItemOpen);
        menuFile.add(menuItemSave);
        menuBar.add(menuFile);
        setJMenuBar(menuBar);

        setVisible(true);
    }

    public void openFile() {
        getJMenuBar().setEnabled(false);
        FileDialog fd = new FileDialog(this, "Choose a file", FileDialog.LOAD);
        fd.setVisible(true);
        getJMenuBar().setEnabled(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == menuItemOpen) {
            openFile();
        }
    }

    public static void main(String[] arguements) {
        System.setProperty("apple.laf.useScreenMenuBar", "true");
        new MenuTest();
    }

}

预先感谢您的意见/建议!


对我来说,我可以通过启用/禁用每个来解决问题JMenuItem而不是菜单栏或菜单本身。

我也在 E​​DT 上做了所有的事情,以防万一这就是问题,但它没有帮助。

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener;

public class MenuTest implements ActionListener {

    private JMenuItem menuItemNew = new JMenuItem("New");
    private JMenuItem menuItemOpen = new JMenuItem("Open");
    private JMenuItem menuItemSave = new JMenuItem("Save");
    private JMenu menuFile = new JMenu("File");
    private JMenuBar menuBar = new JMenuBar();
    JFrame frame;
    public MenuTest() {

    }

    public void buildGui(){
        frame = new JFrame("JMenu Test");
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        menuItemOpen.addActionListener(this);

        menuFile.add(menuItemNew);
        menuFile.add(menuItemOpen);
        menuFile.add(menuItemSave);

        menuBar.add(menuFile);
        frame.setJMenuBar(menuBar);

        frame.setVisible(true);
    }

    public void openFile() {
        menuItemNew.setEnabled(false);
        menuItemOpen.setEnabled(false);
        menuItemSave.setEnabled(false);

        FileDialog fd = new FileDialog(frame, "Choose a file", FileDialog.LOAD);
        fd.setVisible(true);

        menuItemNew.setEnabled(true);
        menuItemOpen.setEnabled(true);
        menuItemSave.setEnabled(true);

    }

    @Override
    public void actionPerformed(ActionEvent e) {

            openFile();
        }

    public static void main(String[] arguements) {
        System.setProperty("apple.laf.useScreenMenuBar", "true");
        EventQueue.invokeLater(()->{
            new MenuTest().buildGui();
                });
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JMenuBar禁用后不启用 的相关文章

  • 外部硬件指纹扫描仪和 Android 设备集成

    我想建立一个android像员工考勤这样的应用程序使用fingerprint scanner 我想知道 是否可以使用外部硬件设备进行指纹识别 扫描 如何将Android应用程序与外部硬件finger集成 打印扫描设备 如何从外部硬件设备获取
  • 在多个不同线程之间共享变量

    我想在多个线程之间共享一个变量 如下所示 boolean flag true T1 main new T1 T2 help new T2 main start help start 我想分享flag在主线程和帮助线程之间 这是我创建的两个不
  • Java RMI 通过互联网

    我正在用 Java 开发一个游戏 使用 RMI 进行所有网络通信 RMI 允许我调用服务器上的方法 但这对我来说还不够 我还希望服务器能够在连接的客户端之间传播消息 我的客户端查找服务器 它的接口扩展了远程 并在其上注册 它允许服务器知道谁
  • 在 ElasticSearch API 应用程序中找不到 NodeBuilder

    我正在尝试实现 Elasticsearch API 我的系统接受 nodeBuilder 时出现错误 这是代码 import org elasticsearch action index IndexResponse import org e
  • 二维数组中的寻路

    假设我有这个二维数组地图 0 0 0 0 7 1 1 1 1 1 1 1 1 0 7 7 7 7 1 1 1 24 1 1 1 1 0 7 24 24 24 24 24 24 24 1 1 3 1 0 7 23 23 23 23 23 23
  • 使用 python 中的 java 库

    我有一个 python 应用程序和 java 应用程序 python 应用程序为 java 应用程序生成输入并在命令行上调用它 我确信一定有一个更优雅的解决方案 就像使用 JNI 从 Java 调用 C 代码一样 有什么指点吗 仅供参考 我
  • Clojure Web 应用程序 - 我从哪里开始?

    最近我一直在研究 Clojure 我喜欢这门语言 我想看看我是否可以在其中制作一个小型网络应用程序 只是为了挑战自己 但是 我完全没有设置任何与 Java 相关的 Web 应用程序的经验 事实上 我对 Java 并没有太多的经验 我从哪说起
  • 当派生类中重写该方法时,如何使用派生类 Object 调用基类方法?

    class A public void m1 System out println hi base class class B extends A public void m1 System out println hi derived p
  • 正则表达式的替代(流畅?)界面设计

    我刚刚看到了一个巨大的 Java 正则表达式 这让我对正则表达式的一般可维护性进行了一些思考 我相信大多数人 除了一些糟糕的 Perl 贩子 都会同意正则表达式很难维护 我正在考虑如何解决这种情况 到目前为止 我最有希望的想法是使用流畅的界
  • 非法监控状态异常

    如何将轮询线程传递给另一个线程进行处理 程序执行在控制器类中 该类具有 main 方法和线程池 主类控制器 public static void main String args throws InterruptedException Ru
  • Java 中的逻辑回归

    我们需要用 Java 进行逻辑回归 我们在 Python 中使用了这段代码http blog smellthedata com 2009 06 python logistic regression with l2 html http blo
  • java POI XSSF 公式评估器

    我在保存新的 Excel 文件时遇到问题 我希望当它被保存时 公式会自行计算 但目前它只是返回 Excel 文件中的一个字符串 公式是正确的 我不知道到底要得到FormulaEvaluator上班 这是我输入返回字符串的公式的地方 data
  • 定时器启动/停止参数

    自从加入这个社区以来 我在技能和进步方面取得了突飞猛进的进步 你们都是一个巨大的帮助 我无法提供一个计时器 该计时器已在启动和停止时实现了某些参数 我要么收到错误消息 局部变量计时器可能尚未初始化 要么没有收到错误消息 但什么也没有发生 也
  • FEST-swing 示例不起作用,frame.isShowing() 返回 false

    尝试使用 FEST Swing 进行 Swing GUI 测试 并使用来自http easytesting org swing wiki pmwiki php n FEST Swing LaunchFromMain http easytes
  • Android 布局崩溃

    I use a XWalkView https crosswalk project org 加载网页和视频查看器 https github com Bilibili ijkplayer在我的应用程序中播放实时视频 我希望 IjkVideoV
  • OkHttp javax.net.ssl.SSLPeerUnverifiedException:主机名domain.com未验证

    我几天来一直在努力让它发挥作用 我正在尝试通过以下方式连接到我的服务器https带有自签名证书 我认为现在没有任何页面或示例是我未读过的 我做了什么 按照本教程创建了 bks 密钥库 http blog crazybob org 2010
  • 如何为 Weblogic 10.3.6 启用 Java 持久性 2.0

    我正在使用 eclipse 和 weblogic 服务器 为了将项目添加到 weblogic 服务器 它需要支持 Java Persistance 2 0 但是当尝试安装它时 我不断收到此消息 在 Weblogic Server 安装中启用
  • 在同一项目上使用 Eclipse 和 NetBeans

    Eclipse 是一个非常棒的编辑器 我更喜欢使用它 但是缺少 Eclipse 的 GUI 设计工具 另一方面 NetBeans 非常适合 GUI 设计 在同一项目中使用 NetBeans 进行 GUI 设计和 Eclipse 进行其他所有
  • hibernate通过主键查询

    我想通过主键创建查询 假设我有类主键 PersonKey 属性是 name 和 id 我有 Person 类 属性是 PersonKey 地址 DOB 现在 我想通过主键搜索人员 首先 我创建 PersonKey 的实例 并将名称设置为 j
  • 我可以在方法体内使用注释吗?

    允许 Java 注释的语义将它们放置在某处在函数体内 例如注释特定的函数调用 语句或表达式 例如 class MyClass void theFunc Thing thing String s null Catching NullPoint

随机推荐

  • php 中 eregi() 的替代方案 [重复]

    这个问题在这里已经有答案了 因此 我在邮件脚本中使用了 eregi 但最近 我收到该函数已弃用的错误 那么 替换以下代码的最简单方法是什么 if eregi A Z0 9 A Z0 9 A Z 2 4 trim POST email 任何帮
  • Pandas:如何创建年周变量?

    我有一个带有日期时间的数据框 dates pd date range 9 25 2010 periods 10 freq D df pd DataFrame col dates df col pd to datetime df col df
  • 连接无序线段

    我的算法生成一个 通常 数千条线段 全是二维 的列表 我需要将它们连接成大型折线 这些生成的折线可能是闭合的或开放的 但它们永远不会自相交 线段没有方向 即可能需要翻转线段才能将其连接到相邻线段 找到这些折线的极快方法是什么 我必须实时执行
  • 什么是可以轻松集成到现有应用程序的优秀 Ruby on Rails 论坛?

    什么是可以轻松集成到现有应用程序的优秀开源 RoR 3 论坛 可选功能 OpenID 支持 Haml SCSS 模板 支持表情符号 YouTube 图像等 我可能会对其进行很多更改 而且我对 Ruby 的了解仍然很弱 因此干净的 带注释的代
  • 如何反转 sed 输出?

    我正在阅读大约 500 个字符的行 我怎样才能让 sed 不用某些东西替换该字符串 而是用某些东西替换该行的其余部分 简而言之 我想删除指定字符串周围的所有文本 使用 awk 删除列不起作用 因为匹配的字符串前后有不确定数量的字符 有任何想
  • 如何将 JFreechart 添加到面板?

    我尝试寻找答案来使其正常工作 但没有成功 我快要失去理智了 所以这是我的问题 我最近下载了 JFreeChart 来创建图表并在我的 GUI 中实现它们 这是我想要插入图形的 GUI 和面板 以白色标记 报告1 http www freei
  • Fiddler 测试 API Post 传递 [Frombody] 类

    我有一个非常简单的 C APIController 名为 TestController 其 API 方法如下 HttpPost public string HelloWorld FromBody Testing t return t Nam
  • 组合框架更新 UI 无法正常工作

    我想尝试Combine框架 使用非常简单 按aUIButton 并更新UILabel 我的想法是 添加发布者 Published var cacheText String 订阅 cacheText assign to text on cac
  • 无法在类似字节的对象上使用字符串模式 - python 的重新错误[重复]

    这个问题在这里已经有答案了 我正在做 python 挑战并试图熟悉 python 所以在不看答案的情况下 我尝试使用 python 的 url 阅读器来读取 html 然后找到所需的字母 但是在下面的代码中我收到一个错误 最初是 pytho
  • 为 Windows 服务创建 MSI 安装程序

    我在 Visual Studio 2008 中有一个 Windows 服务项目 我还添加了安装和部署项目 不幸的是 当我安装它时 该服务没有显示在服务 MMC 管理单元中 我已经将 ProjectInstaller 添加到服务项目中 并且已
  • 使用APNS发送远程推送通知的送达报告 - IOS

    我正在使用 APNS 发送远程推送通知 要求是当通知发送给应用程序用户时 即使用户没有点击通知甚至没有看到通知 根据通知 id i 将发送收据发送到 Web 服务器 即调用 Web 服务 已收到 APNS 没有提供交付报告 他们是 APNS
  • 当数据依赖于日期时间时,在数据库中保存日期时间和时区信息的最佳实践

    关于在数据库中保存日期时间和时区信息有很多问题 但更多的是总体水平 这里我想讲一个具体的案例 系统规格 我们有一个订单系统数据库 它是一个多租户系统 租户可以使用任意时区 它是任意的 但每个租户只有一个时区 保存在租户表中一次并且永不更改
  • 为什么 int[] a = new int[1] 而不是 int a ?

    这段代码中是否有一些我在 java 中看不到的隐藏含义 怎么可能有用呢 int a new int 1 不仅仅是 int a 因为从我的角度来看这是一样的 int a 定义一个原始 int int a new int 1 定义一个有空间容纳
  • 如何在 C# 中为自定义 DataTemplateSelector 获取 DataTemplate 的 {x:DataType}

    我正在写一个自定义DataTemplateSelector for a ComboBox控件 我需要用它来显示不同的DateTemplates对于不同类型的物体 在封闭和开放模式下ComboBox 这是DataTemplateSelecto
  • SQL触发器更新另一个表

    我有一个 Maximo 数据库 其表结构无法更改 我希望在创建或更新时将主要电子邮件地址复制到 PERSON 表中 以下结构描述了 PERSON 表和 EMAIL 表 人员表 PERSONID EMAIL other irrelevant
  • 刷新页面后将焦点设置在网页上而不是 Firefox 调试器上

    我正在使用默认的 Firefox Web 开发人员工具 火狐浏览器 20 0 Mac OS X 10 7 如果我打开开发人员工具的调试器面板 但未聚焦 并刷新页面 焦点将转到调试器面板而不是刷新的页面 我可以将焦点设置为转到刷新的页面吗 如
  • ReentrantReadWriteLock 中的读锁和写锁是否有某种关联?

    请详细解释一下合同 我不知道里面是否包含两把锁ReentrantReadWriteLock有某种关系吗 或者这些只是两把普通锁的捆绑 它允许多个线程同时读取资源 但要求线程等待独占锁才能写入资源 规则是 多个读者可以同时共享资源 如果你有一
  • 检测富文本框中是否发生粘贴事件

    有没有一种方法可以让我们知道富文本框中是否发生了剪贴板粘贴事件 该事件将用于通过粘贴的文本块执行某些操作 thanks 这是我的代码 protected override void WndProc ref System Windows Fo
  • 在 Mongoose 中复制数据库

    如何在 Mongoose 中将一个数据库复制到另一个数据库 像这样的命令行 db copyDatabase sourceDb destinationDb Thanks 猫鼬中没有直接的可能性 最简单的方法似乎是使用mongodb 原生客户端
  • JMenuBar禁用后不启用

    我正在禁用JMenuBar在显示之前FileDialog 因为当FileDialog可见 使用getJMenuBar setEnabled false 然后打电话getJMenuBar setEnabled true 之后FileDialo