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

来源:互联网 发布:计算器编程学习 编辑:程序博客网 时间:2024/05/16 02:50

    本来是想分析一下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会给你报一个找不到入口什么的异常出来.

原创粉丝点击