【问题标题】:Creating a submenu in context menu from overridden getActions in Java JHotDraw从 Java JHotDraw 中覆盖的 getActions 在上下文菜单中创建子菜单
【发布时间】:2012-12-02 05:24:00
【问题描述】:

我正在覆盖基于 Java 的框架 JHotDraw 中的 getActions 方法,这是一个托管 here 的开源项目。方法getActionsDrawingview 中的Figure 上创建一个右键单击上下文菜单。我可以使用下面的代码正确添加额外的上下文菜单选项。我需要知道如何在上下文菜单中添加子菜单。

@Override
public Collection<Action> getActions(Point2D.Double p) {
  Collection<Action> popupMenu = new ArrayList<Action>();
  popupMenu.add(new AbstractAction("add Context Option 1") {
    public void actionPerformed(ActionEvent event) {
      preformThisMethod("params");
    }
  });
  popupMenu.add(new AbstractAction("add Context Option 2") {
    public void actionPerformed(ActionEvent event) {
      preformThisMethod("params");
    }
  });
  // How to add a sub menu to the context menu?
  return popupMenu;
}

【问题讨论】:

  • 你试过usual approach吗?
  • 我希望我可以使用JPopupMenu 方法。我必须使用框架方法{Homework Requirement}。只要我们使用 JHotDraw 框架,我就在软件工程课程中对我们如何实现功能提出了松散的要求。这意味着我需要重写某些方法,例如getActions。我什至不确定是否可以使用 JHotDraw 框架的 Action 集合方法创建子菜单,这将是实现所需功能的一种非常方便和直观的方式。
  • 经过几个小时的努力,我确定考虑到框架的结构处理上下文菜单,子菜单是不可能的。

标签: java swing contextmenu


【解决方案1】:

支持添加子菜单。

org.jhotdraw.gui.JPopupButton 类扩展 JButton 以提供在整个框架中使用的弹出菜单。方法add(javax.swing.JMenu submenu) 可用于构建分层子菜单。例如,org.jhotdraw.samples.draw.DrawingPanelZoom 子菜单添加到creationToolbar 中最右侧的弹出菜单,以及其他杂项编辑操作。 org.jhotdraw.draw.action.ButtonFactory中的方法createFontButton()是另一个用于addFontButtonsTo()编辑器的例子。

相比之下,右键单击org.jhotdraw.draw.DefaultDrawingVieworg.jhotdraw.draw.DelegationSelectionTool 中的javax.swing.JPopupMenu 实例处理,如org.jhotdraw.samples.mini.EditorSample 所示。特别是,AbstractAction 属性 Actions.SUBMENU_KEY 标识子菜单名称。设置DEBUG = true查看效果。目前没有定义。

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2017-05-13
    • 2017-12-24
    相关资源
    最近更新 更多