gpt4 book ai didi

java - 在 Java Swing 中销毁 JPopupMenu

转载 作者:行者123 更新时间:2023-11-30 05:04:34 25 4
gpt4 key购买 nike

我正在使用当我右键单击 GUI 中的某些组件时显示的 JPopupMenu。

现在我必须销毁这两种情况下显示的弹出菜单:

  1. 用户点击弹出窗口中显示的菜单条目(执行相关操作并关闭弹出窗口)
  2. 用户点击屏幕上的其他位置(关闭弹出窗口而不执行任何操作)

我解决了这个问题,将当前可见的弹出窗口存储到 ArrayList 中,并在发生前两种情况之一时手动将它们设置为不可见。

所以,我想知道两件事:

  1. 有没有更干净的方法可以做到这一点,而无需手动获取所有 Activity 弹出窗口的引用? (也许任何 Swing 功能都可以实现这一点?)
  2. 是否足以将弹出窗口设置为不可见,不再引用该对象,以释放其分配的内存?或者我必须使用像 dispose 这样的方法? (JPopupMenu 中没有定义 dispose 方法)

展示我的实际代码有点困难,因为它有点复杂。无论如何,它执行以下操作:

public EditorPopupMenu getPopupMenu() {
this.popupMenu = new EditorPopupMenu();

EditorMenuItem copy = GuiConcreteFactory.getInstance().createMenuItem(Gui.getInstance().copyItemAction);
EditorMenuItem cut = GuiConcreteFactory.getInstance().createMenuItem(Gui.getInstance().cutItemAction);
EditorMenuItem paste = GuiConcreteFactory.getInstance().createMenuItem(Gui.getInstance().pasteItemAction);

this.popupMenu.add(copy);
this.popupMenu.add(cut);
this.popupMenu.add(paste);

this.popupMenu.addSeparator();

EditorMenuItem settings = GuiConcreteFactory.getInstance().createMenuItem(
new ApplicationShowDialogAction("settings",null,
new EditorAreaDialog (this)) );
this.popupMenu.add(settings);
return popupMenu;
}

其中 EditorPopupMenu 扩展了 JPopupMenu。当在特定对象上发生单击并且指定对象构造其弹出菜单并返回它时,MouseListener 会调用前面的代码。

从 MouseListener 内部:

if (me.getModifiers() == InputEvent.BUTTON3_MASK){
// //System.out.println("ResizableMouseAdapter: BUTTON_3_MASK");


EditorPopupMenu popupMenu = sourceComp.getType().getPopupMenu();
if ( popupMenu!= null){
//System.out.println("COMPONENT HAS A POPUP MENU");
popupMenu.setLocation( sourceComp.getLocationOnScreen().x + me.getX(),
sourceComp.getLocationOnScreen().y + me.getY());
popupMenu.setVisible(true);
Gui.getInstance().addActivePopup(popupMenu);
}

}

这就是全部。使用此代码我的 JPopupMenu 不会正确消失。

最佳答案

这是默认行为。

阅读 Swing 教程中关于 Bringing Up a Popup Menu 的部分获取解释和工作示例。

关于java - 在 Java Swing 中销毁 JPopupMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5530104/

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