gpt4 book ai didi

java - JPopUpMenu 添加菜单项的问题

转载 作者:行者123 更新时间:2023-11-29 04:03:50 25 4
gpt4 key购买 nike

我正在使用以下代码创建 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com