Java 如何确定jmenuitem是否是分隔符

Java 如何确定jmenuitem是否是分隔符,java,swing,separator,jmenuitem,Java,Swing,Separator,Jmenuitem,我有一个装满菜单项的JMenuBar,包括分隔符。默认情况下,我禁用了“保存”菜单项,现在如果用户开始键入,我需要启用它(如果用户没有更改文档,基本上用户无法保存文档)。但我的问题在于循环每个菜单项,将“保存”从禁用更改为启用 我尝试使用嵌套的for循环根据索引获取名称,但当循环遇到分隔符时,会出现异常 int count=frame.getJMenuBar().getMenuCount() for(int i=0;i

我有一个装满菜单项的JMenuBar,包括分隔符。默认情况下,我禁用了“保存”菜单项,现在如果用户开始键入,我需要启用它(如果用户没有更改文档,基本上用户无法保存文档)。但我的问题在于循环每个菜单项,将“保存”从禁用更改为启用

我尝试使用嵌套的for循环根据索引获取名称,但当循环遇到分隔符时,会出现异常

int count=frame.getJMenuBar().getMenuCount()

for(int i=0;i
基本上,我正在尝试,在第二个循环中,检查菜单名“Save”,然后以这种方式启用它。我不想硬编码索引,以防以后更改菜单


我还尝试手动输入索引,而不是使用循环(这就是为什么我发现它是由分隔符引起的。现在我要做的是在第二个循环中,检查menuitem是否是分隔符。但我不确定如何做。我尝试搜索谷歌,但没有找到任何结果。有什么建议吗?

您面临的问题是因为
getItemCount
返回分隔符和项。但是,
getItem()
假定给定位置有一个项。您可以使用此循环检查该项是否为分隔符,因为
jsepator
JMenuItem
都是从
组件扩展而来的

for (int j = 0; j < itemCount; j++) {
Component component = frame.getJMenuBar().getMenu(i).getMenuComponent(j);

    if (component instanceof JSeparator)
    {
       //found a separator
    } else if (component instanceof JMenuItem)
    {
       //found a menu item
       System.out.println(((JMenuItem) component).getAccessibleContext().getAccessibleName());
    }  
}
for(int j=0;j
您面临的问题是因为
getItemCount
返回分隔符和项目。但是,
getItem()
假设给定位置有一个项。您可以使用此循环检查该项是否为分隔符,因为
jsepator
JMenuItem
都是从
组件扩展而来的

for (int j = 0; j < itemCount; j++) {
Component component = frame.getJMenuBar().getMenu(i).getMenuComponent(j);

    if (component instanceof JSeparator)
    {
       //found a separator
    } else if (component instanceof JMenuItem)
    {
       //found a menu item
       System.out.println(((JMenuItem) component).getAccessibleContext().getAccessibleName());
    }  
}
for(int j=0;j
您面临的问题是因为
getItemCount
返回分隔符和项目。但是,
getItem()
假设给定位置有一个项。您可以使用此循环检查该项是否为分隔符,因为
jsepator
JMenuItem
都是从
组件扩展而来的

for (int j = 0; j < itemCount; j++) {
Component component = frame.getJMenuBar().getMenu(i).getMenuComponent(j);

    if (component instanceof JSeparator)
    {
       //found a separator
    } else if (component instanceof JMenuItem)
    {
       //found a menu item
       System.out.println(((JMenuItem) component).getAccessibleContext().getAccessibleName());
    }  
}
for(int j=0;j
您面临的问题是因为
getItemCount
返回分隔符和项目。但是,
getItem()
假设给定位置有一个项。您可以使用此循环检查该项是否为分隔符,因为
jsepator
JMenuItem
都是从
组件扩展而来的

for (int j = 0; j < itemCount; j++) {
Component component = frame.getJMenuBar().getMenu(i).getMenuComponent(j);

    if (component instanceof JSeparator)
    {
       //found a separator
    } else if (component instanceof JMenuItem)
    {
       //found a menu item
       System.out.println(((JMenuItem) component).getAccessibleContext().getAccessibleName());
    }  
}
for(int j=0;j
最简单的方法是在创建“保存”按钮时保留对该按钮的引用。然后只需

saveButton.setEnabled(true);

不要在菜单中搜索按钮。

最简单的方法是在创建“保存”按钮时保留对该按钮的引用。然后,您所要做的就是

saveButton.setEnabled(true);

不要在菜单中搜索按钮。

最简单的方法是在创建“保存”按钮时保留对该按钮的引用。然后,您所要做的就是

saveButton.setEnabled(true);

不要在菜单中搜索按钮。

最简单的方法是在创建“保存”按钮时保留对该按钮的引用。然后,您所要做的就是

saveButton.setEnabled(true);

不要在菜单中搜索按钮。

我要做的第一件事是利用
操作
API,请参见。
JMenu
s很棘手,因为它们根据从
JMenuItem
收集的信息构建内容,并且不倾向于将它们直接放在
JMenu
本身为什么不简单地使用
Save
菜单而不是这个hack?我要做的第一件事是使用
Action
API,请参见。
JMenu
s很棘手,因为它们从
JMenuItem
收集的信息中构建内容,并且不倾向于将它们直接放在
JMenu
本身为什么不简单地使用
Save
菜单而不是这个hack?我要做的第一件事是使用
Action
API,请参见。
JMenu
s很棘手,因为它们根据从
JMenuItem
收集的信息构建内容,并且不倾向于放置