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