代码之家  ›  专栏  ›  技术社区  ›  rachvela

jpopupmenu添加菜单项时出现问题

  •  1
  • rachvela  · 技术社区  · 16 年前

    我正在创建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 项目。 如果我先添加菜单项到 弹出窗口2 然后 POPUP1 然后 POPUP1 工作精细 POPUP2 不。

    这是正常的行为还是我错过了什么?
    我已经查过了,但什么也找不到

    2 回复  |  直到 16 年前
        1
  •  3
  •   jprete    16 年前

    A JMenuItem 属于一个,而且只有一个, JPopupMenu (或任何其他菜单)。不能将Swing组件添加到多个容器中;如果这样做,则组件将自动从上一个容器中删除。所以当你添加 freeze 和 unfreeze 到 popup2 ,它们将自动从中删除 popup1 .

    要使这项工作正常进行,您需要做的是总共创建六个 菜单项 S,每个菜单三份。两对菜单项执行相同操作的事实只反映在 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);
    
        2
  •  1
  •   camickr    16 年前

    实际上,更好的解决方案是创建操作。可以共享操作并将其添加到多个组件(jmenuitems、jbuttons等)。您甚至可以启用/禁用同时启用/禁用所有组件的操作。

    您可以从上的Swing教程中阅读该部分。 How to Use Actions 更多信息。