我有一个新的UI我正在使用Java实现,并且在实现包含JMenu(以及几个JMenuItems)的JPopupMenu时遇到问题,它本身包含几个JMenuItems。 JPopupMenu出现在我点击人民币的地方,看起来不错,但是尽管我尽了最大的努力去追加()他们,但当鼠标悬停时,“连接”JMenu似乎没有任何孩子。
无法将JMenuItem添加到JPopupMenu中的JMenu
查看了几个在线的例子,我还没有看到任何具体实现mouseEntered()的监听器来推出子项。我想到我在菜单初始化方法中弄乱了一些东西。
我附上了相关的代码,供您细读。
//Elsewhere...
private JPopupMenu _clickMenu;
//End Elsehwere...
private void initializeMenu()
{
_clickMenu = new JPopupMenu();
_clickMenu.setVisible(false);
_clickMenu.add(generateConnectionMenu());
JMenuItem menuItem;
menuItem = new JMenuItem("Configure");
addMenuItemListeners(menuItem);
_clickMenu.add(menuItem);
menuItem = new JMenuItem("Status");
addMenuItemListeners(menuItem);
_clickMenu.add(menuItem);
}
private JMenu generateConnectionMenu()
{
JMenu menu = new JMenu("Connect");
List<Port> portList = _database.getAllPortsInCard(_cardId);
for(int i = 0; i < portList.size(); i++)
{
menu.add(new JMenuItem(portList.get(i).getName()));
}
return menu;
}
的代码肯定不是最漂亮的,但去容易对我,它已经改变了今天太多次允许的,而我试图找出为什么这是不工作的时间。我想这可能是一个范围问题,但我已经尝试了一些不同的代码配置无济于事。随意询问任何后续问题,或者让我明显失察(这是在......之前发生的)。谢谢大家!
编辑: 粉笔这一个缺乏与Java经验和Swing ...我手动定位,并使得JPopupMenu
可见,而不是使用JComponent.setComponentPopupMenu(menu)
方法。在完成上述图像(本身为JButton)中的卡模块之后,子菜单正确显示。下面包含了初始化代码的一个不同的功能版本。
private void initializeMenu()
{
_cardMenu = new JPopupMenu();
JMenu menu = new JMenu("Connect");
JMenuItem menuItem;
menuItem = new JMenuItem("1");
menu.add(menuItem);
menuItem = new JMenuItem("2");
menu.add(menuItem);
_cardMenu.add(menu);
_cardMenu.add(new JMenuItem("Configure"));
_cardMenu.add(new JMenuItem("Status"));
_mainButton.setComponentPopupMenu(_cardMenu); //Important, apparently!
}
所以,经验教训。谢谢你们的帮助!
啊,谢谢!这可以在Mac OS X上正常工作。我注意到您的工厂方法'makeMenuItem()'有助于避免常见的重新使用局部变量的问题。对不起,我不能再次投票。 – trashgod 2012-04-03 08:05:33
编辑与听众arest,按预期工作,WinXP,Java6 – mKorbel 2012-04-03 08:05:37