CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

可否用xml配置文件,然后动态生成界面?

楼主bigc2000(公元2005年4月9日)2005-03-09 19:38:13 在 Java / J2SE / 基础类 提问

可否用xml配置文件,然后动态生成界面?  
   
  是这样的,如果界面要增加一控件,都需要重新写程序,   很麻烦的.  
   
  可否通过配置文件,然后解析该文件,得到相应的界面?  
   
  如果有类似的东西,也请诸位告知以下,非常感谢!  
   
  问题点数:80、回复次数:11Top

1 楼cyicecream(为了升仙(星)到处UP)回复于 2005-03-09 19:53:16 得分 20

有,我做过,比如一个动态的表格,通过解析XML数据,读取标志,如果不满足则不显示这列。  
  要达到这样的动态性,就需要前期设计好,这是代价Top

2 楼qnzzzz(独孤求饭)回复于 2005-03-09 20:25:37 得分 0

一定可以的Top

3 楼zealVampire(白鹤泉)回复于 2005-03-09 20:44:31 得分 5

肯定可以   最主要是你添加了这个控件用了干什么   就是说这个控件可能要添加执行动作,做过一个类似的安装程序。Top

4 楼tx18(www.sqlserver.com.cn)回复于 2005-03-09 21:08:57 得分 5

www.htok.netTop

5 楼softbugg()回复于 2005-03-09 22:04:03 得分 5

可以的,看看eclipseTop

6 楼bigc2000(公元2005年4月9日)回复于 2005-03-09 22:19:41 得分 0

谢谢,诸位仁兄,  
   
  我列出几个难题  
  关键是  
  1   依赖关系问题   比如一个textField   它的值域   依赖于其他某一个   控件,  
    具体讲有:    
          逻辑关系   A   存在,B才显示,   A   checkbox   被选中   ,B才可以有效,等等。需要用到关系运算  
                      (NOT,AND,OR)  
   
          数学运算关系           A(设为JTextField)   A的值   属于[0,   B   /2],缺省为   B/3   (假设B为某一控件TextField的值)  
   
   
  2,界面关系问题,比如原来   panel   上面有3个控件,如果要加入   一个控件,界面如何摆放比较合适  
  (我想直接写在xml里面用GridBagLayout)  
  还要添加默认的ActionListener。  
   
   
  这个不同于Eclipse.   Eclipse   其实加载的是插件方式。也就是说还必须写不少代码。(我希望之需要  
  XML,即便是很复杂)  
   
  尤其是   依赖关系,还没有什么好的想法Top

7 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-03-09 22:25:38 得分 5

用XSL解析XML不行吗?象CSDN这样的Top

8 楼jinxfei(周华健、言兴朋、茅威涛)回复于 2005-03-09 23:25:53 得分 35

有现成的开源代码:  
  swixml  
  还有很多其它的,专门负责从xml文件动态生成swing页面。Top

9 楼zdnetchina(天天向上)回复于 2005-03-09 23:37:17 得分 5

xslt也行Top

10 楼jinxfei(周华健、言兴朋、茅威涛)回复于 2005-03-10 00:03:58 得分 0

我这里还有一段我自己实现的,通过Digester来自动从xml页面生成swing界面的功能,  
  不过比较简单:  
  xslt可能生成web页面,也就是html或者其它脚本型的界面比较方便。  
   
  配置文件:  
  <?xml   version="1.0"   encoding="UTF-8"?>  
  <config>  
  <ConfigDialogTitle>BMC   Patrol   采集配置</ConfigDialogTitle>  
  <ConfigGroup>  
  <title>基本配置</title>  
  <configItem   name="采集点名称"></configItem>  
  <configItem   name="采集点描述"></configItem>  
  <configItem   name="采集点ID"></configItem>  
  </ConfigGroup>  
  <ConfigGroup>  
  <title>Patrol   Agent连接配置</title>  
  <configItem   name="Patrol   Agent   IP"></configItem>  
  <configItem   name="Patrol   Agent   端口"></configItem>  
  <configItem   name="Patrol   Agent   用户"></configItem>  
  <configItem   name="Patrol   Agent   密码"></configItem>  
  </ConfigGroup>  
  </config>  
   
   
  代码:  
  Digester   digest=new   Digester();  
                  digest.addObjectCreate("config","com.ubi.config.demo.ConfigDialog");  
                  digest.addCallMethod("config/ConfigDialogTitle","setTitle",   0);  
                  digest.addObjectCreate("config/ConfigGroup",   "com.ubi.config.demo.ConfigTab");  
                  digest.addCallMethod("config/ConfigGroup/title","setName",0);  
                  digest.addCallMethod(   "config/ConfigGroup/configItem",   "addConfigItem",   1   );  
                  digest.addCallParam(   "config/ConfigGroup/configItem",   0,"name"   );  
                  digest.addSetNext(   "config/ConfigGroup",   "addConfigTab"   );  
   
                  try   {  
                          BufferedReader   r=new   BufferedReader(new   StringReader(cfgTemplate));  
                          Object   obj=digest.parse(r);  
                          ConfigDialog   dlg=(ConfigDialog)obj;  
                          dlg.setReaderTypeID(this.readerTypeIntID);  
                          dlg.setSize(new   Dimension(600,400));  
                          dlg.show();  
                          System.out.println("parsed   object   is   "+obj);  
                  }   catch   (IOException   e)   {  
                          //   TODO   Auto-generated   catch   block  
                          e.printStackTrace();  
                  }   catch   (SAXException   e)   {  
                          //   TODO   Auto-generated   catch   block  
                          e.printStackTrace();  
                  }  
   
   
   
  相关类:  
   
  /*  
    *   Created   on   2005-3-2  
    *  
    *   TODO   To   change   the   template   for   this   generated   file   go   to  
    *   Window   -   Preferences   -   Java   -   Code   Style   -   Code   Templates  
    */  
  package   com.ubi.config.demo;  
   
  import   java.awt.BorderLayout;  
  import   java.awt.Dimension;  
  import   java.awt.FlowLayout;  
  import   java.awt.event.ActionEvent;  
  import   java.awt.event.ActionListener;  
  import   java.sql.ResultSet;  
  import   java.sql.SQLException;  
   
  import   javax.swing.JButton;  
  import   javax.swing.JDialog;  
  import   javax.swing.JPanel;  
  import   javax.swing.JScrollPane;  
  import   javax.swing.JTabbedPane;  
   
  import   com.ubi.config.demo.listener.CheckBoxTreeCellRenderer;  
   
  /**  
    *   @author   ibm  
    *  
    *   TODO   To   change   the   template   for   this   generated   type   comment   go   to  
    *   Window   -   Preferences   -   Java   -   Code   Style   -   Code   Templates  
    */  
  public   class   ConfigDialog   extends   JDialog   implements   ActionListener{  
          JTabbedPane   configTabs;  
          int   readerTypeID;  
          public   void   setReaderTypeID(int   id){  
                  readerTypeID=id;  
          }  
          JPanel   contentP=new   JPanel();  
          public   ConfigDialog(){  
                  super();  
                  contentP.setLayout(new   BorderLayout());  
                  this.setContentPane(contentP);  
                  this.setSize(new   Dimension(200,150));  
                  configTabs=new   JTabbedPane();  
                  contentP.add(configTabs,   BorderLayout.CENTER);  
                  JPanel   btnPane=new   JPanel();  
                  contentP.add(btnPane,   BorderLayout.SOUTH);  
                  btnPane.setLayout(new   FlowLayout());  
                  JButton   btnAdd=new   JButton("确定");  
                  JButton   btnCacel=new   JButton("取消");  
                  btnPane.add(btnAdd);  
                  btnPane.add(btnCacel);  
                  btnAdd.addActionListener(this);  
                  btnCacel.addActionListener(this);  
          }  
           
          public   void   addConfigTab(ConfigTab   newTab){  
                  configTabs.addTab(newTab.getName(),   newTab);  
          }  
          /*   (non-Javadoc)  
            *   @see   java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)  
            */  
          public   void   actionPerformed(ActionEvent   arg0)   {  
                  if   (arg0.getActionCommand().equals("取消")){  
                          this.hide();  
                  }  
                  if   (arg0.getActionCommand().equals("确定")){  
                          buildEventFilterPage();  
                  }  
          }  
          void   buildEventFilterPage(){  
                  APMJTree   events=new   APMJTree("事件过滤");  
                  events.setCellRenderer(new   CheckBoxTreeCellRenderer());  
                  ResultSet   rs=null;  
                  try   {  
                          rs=ConfigMain.db.executeQuery("select   *   from   coll_pnt_inst_event   where   coll_pnt_inst_uid="+this.readerTypeID);  
                          while   (rs.next()){  
                                  events.buildPath(rs.getString("coll_pnt_inst_event_id"));  
                          }  
                           
                  }   catch   (SQLException   e)   {  
                          //   TODO   Auto-generated   catch   block  
                          e.printStackTrace();  
                  }finally{  
                          try   {  
                                  rs.getStatement().close();  
                          }   catch   (SQLException   e1)   {  
                                  //   TODO   Auto-generated   catch   block  
                                  e1.printStackTrace();  
                          }  
                  }  
                  JScrollPane   scroll=new   JScrollPane(events);  
                  events.expandRow(0);  
                  JDialog   dlg=new   JDialog();  
                  dlg.setTitle("采集事件过滤");  
                  dlg.getContentPane().setLayout(new   BorderLayout());  
                  dlg.getContentPane().add(scroll,BorderLayout.CENTER);  
                  dlg.setSize(400,300);  
                  dlg.setModal(true);  
                  dlg.show();  
          }  
  }  
   
   
   
   
   
   
  /*  
    *   Created   on   2005-3-2  
    *  
    *   TODO   To   change   the   template   for   this   generated   file   go   to  
    *   Window   -   Preferences   -   Java   -   Code   Style   -   Code   Templates  
    */  
  package   com.ubi.config.demo;  
   
  import   javax.swing.JLabel;  
  import   javax.swing.JPanel;  
  import   javax.swing.JTextField;  
   
  /**  
    *   @author   ibm  
    *  
    *   TODO   To   change   the   template   for   this   generated   type   comment   go   to  
    *   Window   -   Preferences   -   Java   -   Code   Style   -   Code   Templates  
    */  
  public   class   ConfigTab   extends   JPanel{  
          public   ConfigTab(){  
                  super();  
                  this.setLayout(null);  
          }  
          int     nextPointX=20;  
          int   positionY=20;  
          int   space=50;  
           
          public   void   addConfigItem(String   itemName){  
                  JLabel   lb=new   JLabel(itemName);  
                  lb.setBounds(positionY,nextPointX,150,20);                  
                  this.add(lb);  
                  JTextField   txt=new   JTextField();  
                  txt.setBounds(positionY+155,nextPointX,150,20);  
                  nextPointX+=space;  
                  this.add(txt);                        
          }  
           
           
  }  
  Top

11 楼bigc2000(公元2005年4月9日)回复于 2005-03-10 13:02:48 得分 0

回复人:   jinxfei(周华健、言兴朋、茅威涛)   (   )   信誉:100     2005-03-10   00:03:00     得分:   0      
     
   
  试试,先谢谢了Top

相关问题

  • 求教:如何根据配置文件生成可视对象
  • 类库项目能否生成配置文件(config)?
  • 关于XML的数据库配置文件
  • 如何用vc有选择的读取xml配置文件??/
  • c#更新xml配置文件的数据
  • 如何读取自定义XML配置文件?
  • 请问在PB中如何生成连接数据库的配置文件,急。。。。。
  • 怎样生成、保存配置文件.ini?环境是在VC6下的程序。
  • 应该如何 添加 配置文件 到 JBuilder 自动生成的 war包 中?
  • 如何根据配置文件生成时间段判断语句?

关键词

  • 界面
  • 控件
  • 页面
  • xml
  • 配置文件
  • configgroup
  • digest
  • 可否
  • configdialog
  • 动态

得分解答快速导航

  • 帖主:bigc2000
  • cyicecream
  • zealVampire
  • tx18
  • softbugg
  • jFresH_MaN
  • jinxfei
  • zdnetchina

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo