java - JPopUpMenu 添加菜单项的问题

标签 java swing

我正在使用以下代码创建 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 组件添加到多个容器;如果你这样做,那么该组件将自动从以前的容器中删除。因此,当您将 freezeunfreeze 添加到 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/

相关文章:

java - 运行类的 Eclipse 快捷方式

java - 选择/突出显示属于 JOptionPane 的 JTextArea 中的文本

java - 为什么我得到这个 NullPointerException?

java - 横向滚动背景移出框架

java - 无法从 JanusGraps 启动 gremlin 服务器(GraphFactory 警告)

java - JTextField 在 GridBagLayout 中未对齐

java - 汉克雷斯特。将集合中的项目与 2 个特定属性值匹配

java - 需要在 java 中找到两个 org.threeten.bp.LocalDateTime 日期之间的天数差异

java - 更改 JLabel 的字体

java - 褪色 sample