我正在使用以下代码创建 JPopUpMenu:
JPopupMenu popup1 = new JPopupMenu();
JPopupMenu popup2 = new JPopupMenu();
JMenuItem freeze = new JMenuItem("freeze");
freeze.addActionListener(new FreezActionListener(this));
JMenuItem unfreeze = new JMenuItem("unfreeze");
unfreeze.addActionListener(new UnFreezActionListener(this));
JMenuItem sortU = new JMenuItem("sort");
JMenuItem sortD = new JMenuItem("sort");
popup1.add(freeze);
popup1.add(unfreeze);
popup1.add(sortU);
popup2.add(freeze);
popup2.add(unfreeze);
popup2.add(sortD);
执行此代码后,popup2
菜单工作正常,但 popup1
只有 sortU
项。
如果我先将菜单项添加到 popup2
,然后添加到 popup1
,则 popup1
可以正常工作,而 popup2
则不能.
这是正常行为还是我错过了什么?
我已经搜索过这个但找不到任何东西
最佳答案
JMenuItem
属于一个,且仅属于一个,JPopupMenu
(或任何其他菜单)。您不能将一个 Swing 组件添加到多个容器;如果你这样做,那么该组件将自动从以前的容器中删除。因此,当您将 freeze
和 unfreeze
添加到 popup2
时,它们会自动从 popup1
中删除。
要使其正常工作,您需要做的是总共创建六个 JMenuItem
,每个菜单三个。两对菜单项执行相同操作的事实仅反射(reflect)在 ActionListener
对每个菜单项执行相同操作。所以....
JPopupMenu popup1 = new JPopupMenu();
JPopupMenu popup2 = new JPopupMenu();
FreezActionListener freezer = new FreezActionListener(this);
JMenuItem freeze1 = new JMenuItem("freeze");
freeze1.addActionListener(freezer);
JMenuItem freeze2 = new JMenuItem("freeze");
freeze2.addActionListener(freezer);
UnFreezActionListener unfreezer = new UnFreezActionListener(this);
JMenuItem unfreeze1 = new JMenuItem("unfreeze");
unfreeze1.addActionListener(unfreezer);
JMenuItem unfreeze2 = new JMenuItem("unfreeze");
unfreeze2.addActionListener(unfreezer);
JMenuItem sortU = new JMenuItem("sort");
JMenuItem sortD = new JMenuItem("sort");
popup1.add(freeze1);
popup1.add(unfreeze1);
popup1.add(sortU);
popup2.add(freeze2);
popup2.add(unfreeze2);
popup2.add(sortD);
关于java - JPopUpMenu 添加菜单项的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1651359/