- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我现在正在专门在菜单栏上使用一些 java 代码,但从 JMenuBar 访问菜单项时遇到问题。菜单栏有一个项目 JMenu,并且 JMenu 中有一个 JMenuItem,我正在尝试访问 JMenuItem,通过名称属性区分项目(这只是我发现区分它们的一种方法,如果有人知道更好的方法)执行此操作的方法请告诉我。)我在应用程序中切换选项卡的 on-change 事件上执行此操作,所以这是我的代码。
public void stateChanged(ChangeEvent e) {
if(tabbedPane.getSelectedIndex() != 0){
for(int i = 0; i < menuItems.length; i++){
MenuElement[] subItems = menuItems[i].getSubElements();
for(int j = 0; j < subItems.length; j++){
System.out.println(subItems[j].getComponent().getName());
}
}
}
}
menuItems 来自 JMenuBar 上的 getSubElements() 调用,我可以获取“File”元素,但是当我执行第二个循环以查找“File”下面的项目时,大多数属性(包括名称)都为空,甚至虽然我已经设置了名称。
在调试器中,我可以看到在 subItems[j].getComponent() 上进行监视时设置的名称,在标记为“组件”的部分下,然后在“元素数据[0]”下。
我确信有一种方法可以获取此属性,但我一直无法弄清楚如何实现。有谁知道如何访问它或知道区分 MenuItems 和 JMenuBar 的更好方法吗?
谢谢。
编辑 - 我想通了。如果有人好奇,JMenuItem 嵌套在 JMenu 的另一层中。此代码打印出我试图查找的名称。
public void stateChanged(ChangeEvent e) {
if(tabbedPane.getSelectedIndex() != 0){
for(int i = 0; i < menuItems.length; i++){
MenuElement[] subItems = menuItems[i].getSubElements();
for(int j = 0; j < subItems.length; j++){
MenuElement[] subSubItems = subItems[j].getSubElements();
for(int k = 0; k < subSubItems.length; k++){
System.out.println(subSubItems[k].getComponent().getName());
}
}
}
}
}
话虽这么说,我不知道为什么会这样。有人知道吗?以下是构建 JMenuBar 的代码:
public void buildMenu(){
menuBar = frame.getJMenuBar();
menu = new JMenu("File");
menu.setName("file");
menuBar.add(menu);
importTiles = buildImportTilesMenuItem();
menu.add(importTiles);
}
public JMenuItem buildImportTilesMenuItem(){
importTiles = new JMenuItem("Import Tiles");
importTiles.setName("importTiles");
importTiles.addActionListener(this);
return importTiles;
}
最佳答案
您必须再次向下钻取的原因是每个 JMenu 子项都是在 JpopupMenu 容器中创建的。因此,文件菜单具有 JPopupMenu 容器,该容器具有您的 importTiles JMenuItem。所以代码可以这样改:
MenuElement[] topLevelElements = frameApp.getJMenuBar().getSubElements();
//Get top level elements--> FileMenu etc
for(MenuElement menuElement: topLevelElements)
{
MenuElement[] subElements = menuElement.getSubElements();
//get the child elements which are of type JPopupMenu
for(MenuElement subElement:subElements)
{
//This is the popuMenu which contains child elements
System.out.println(subElement.toString());
if(subElement instanceof JPopupMenu)
{
//show child elements
for(MenuElement childMenuItem:subElement.getSubElements())
{
//New and Save here ...
System.out.println("ChildMenu Name=>" + childMenuItem.getComponent().getName());
}
}
else
{
//display names directly
}
}
}
关于java - 在 Java 中从 JMenuBarbar 访问 JMenuItems?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24099681/
我有这个代码: JMenuItem itemA; JMenuItem itemB; JMenuItem itemC; JMenuItem[] items = {itemA, itemB, itemC}
如何防止 JMenuItem 在单击 JMenuItem 时关闭菜单? JMenuItem 已启用。 这就是场景,我有 3 个 JMenuItems: JMenuItem: A, B, C; C 显示
我有一个 JPopupMenu 并在其中插入一些 JMenuItems。我需要的是一个看起来与普通母鹿相同但不可单击的 JMenuItem。 我尝试过: JPopupMenu popmen = new
我有一个 JMenu,其中填充有来自具有监听器的数据库中的 JMenuItems,其中之一是从数据库中删除条目(如果选择)。发生这种情况时,JMenuItem 应该从菜单中消失。这是一个简短的例子 f
我正在尝试在 JMenuBar 上创建一个帮助按钮。目前我可以使用这个使其向右对齐 helpItem.setComponentOrientation(ComponentOrientation.RIGH
我正在尝试通过单击文件菜单栏中的菜单项来加载特定文件 (C://myfile.txt),我需要帮助来完成代码的操作部分 JMenuBar menuBar = new JMenuBar(); JMenu
是否可以创建一个包含复选框列表的自定义 JMenuItem?示例是 Excel 过滤器弹出菜单: 到目前为止,我所做的是这样的: JPopupMenu headerPopup = new JPopup
此代码将用户最喜欢的歌曲从 ArrayMap 添加到 JmenuItem public void actionPerformed(ActionEvent evt) { Stri
如何将 JMenuItem (newItem) 添加到 JMenu (menuUsers)?是否有合适的 ActionListener 用于此目的?有一部分代码执行将菜单项添加到菜单的操作。它在引发某
我的 inv 终于可以工作了! :D 但是,你知道...现在...这很愚蠢。我希望它在我右键单击时显示“使用项目 1”或其他内容,所以我这样做: if (actItemx == "It
我有一个带有 JMenuBar 的框架。当我按下 JMenuItems 之一时,我想向框架添加一个 JLabel ,但它不起作用。我不明白……这是同一个类(class)的。 public class
JMenuItem 具有以下构造函数:(来源: GrepCode ) public JMenuItem(Action a) { this(); setAction(a); } 但是,当
我创建了一个带有颜色的 3x3 内存游戏。程序运行并显示颜色,但 JMenuBar 无法正常工作。新棋盘、游戏和结束游戏按钮不起作用。我的 Actionlistener 有问题吗? 这就是代码应该如何
我将菜单添加到工具栏,如下所示: JMenuBar menu = new JMenuBar(); JMenu actions = new JMenu("Aktionen");
我想为颜色列表添加每个菜单项行,但有类似的错误 "at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)" 在我的
所以我必须在 Swing 中为我的 Java 类创建一个简单的 GUI,我偶然发现了这个小的装饰性问题。 我有以下代码: JMenuItem mntmQuit = new JMenuItem(
我试图添加一些菜单,想知道如何在第二个 menuItem 之后添加边框 就这样 Image Here 这是我的代码 jmb = new JMenuBar(); jmb.setPreferredSize
我想为 JMenuItem 设置快捷键。 我现在是这样设置的 openFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionE
我自动生成一组 JMenuItem 并将它们添加到每个右键单击事件的 JPopUpMenu 中。问题是当我在所选菜单上按回车键时,我为菜单项设置的操作没有运行。我可以使用向上/向下键在菜单上导航,但是
我有一个带有标准项和快捷方式的 JMenuBar。但是我注意到快捷方式描述是左对齐的,看起来很难看。有办法右对齐吗? PS:“Umschalt”表示转变。有没有办法强制它说 shift 而不是 Ums
我是一名优秀的程序员,十分优秀!