使用dom4j从XML配置文件中生成菜单(一)

    本来是想分析一下VirgoFtp看看差不多快忘光了的MVC 是怎么回事的,它首先就是菜单生成办法的调用,就是硬编码的方式一级一级的做菜单.我在想这个是不是配在XML然后程序读了来生成要更好些,菜单的体系结构虽然基本不会让用户修改,但考虑到国际化和修改菜单快捷键,用XML存取还是有好处的.

    动手前的问题:
    1.在java中解析XML不会.
    2.SWT菜单体系完全不了解.(汗)

    先搞第2个问题吧,因为看起来简单一点.有JB2007的可视化编辑功能,我生成了一个测试用的菜单类,通知观察与实践,掌握了其中的规律:
    1.菜单分Menu和MenuItem两个概念,Menu是MenuItem的容器,MenuItem可挂接下级Menu,真正在界面上显示的是MenuItem.有子菜单的MenuItem其style必须是SWT.CASCADE,普通的是SWT.PUSH.刚开始的时候,这两个类实例化时的style把我搞晕了,SWT.DROP_DOWN,SWT_POPUP,SWT_CASCADE什么的.后来发现SWT.BAR,SWT.DROP_DOWN,SWT_POPUP只能在Menu上用,MenuItem不用这些.
    2.下级的subMenu虽然在实例化时把本级的MenuItem当参数传进去了,但是还得再回头设置一下,menuItem.setMenu(subMenu),不然下级菜单死活都出不来.这一点我感觉有点多余,改一下Menu的构造方法应该可以不用再回头设置一下的吧.

    然后是XML解析了,网上查了一下,发现dom4j是最佳选择,赶紧下了回来.另外,为了使用XPath,随便把jaxen的包也下回来.
    1.doc = new SAXReader().read(file);一句就完全的解析工作,简单,我喜欢.
    2.Node node = DocumentHelper.createXPath(xpath).selectSingleNode(doc);用XPath直接定位到需要的结点上.
    3.Element.elementIterator浏览下级结点,Element.attributeIterator浏览本结点所有属性.element.nodeCount() > 0可以快速判断本结点是否有下级结点,因为创建Iterrator是比较耗时间的.

    好了,该准备的都准备好,接下来就是编码了.写完一回想,这东西也是个没什么技术含量的,哎,慢慢来吧.为方便查看,我把代码贴在下一篇文章中.

    另外有一点,在XML文件里"&"应该写成"&", 这个在配菜单的记忆键时要用到.写成&的话dom4j会给你报一个找不到入口什么的异常出来.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值