单据开发-业务单据Edit界面代码中篇(GUI端)
关注公众号获取更多金蝶EAS开发方面的内容
因论坛版权要求,部分图片无法显示,可以直接方位微信公众号链接
https://mp.weixin.qq.com/s/PkKrj8UQYMh02L7iSEW4AA
本篇文档介绍业务单据Editt界面的一些常用监听事件开发
控件的监听一般有两种方式添加
1、通过元数据添加
2、通过代码添加
通过元数据添加相对简单,本篇文章主要讲解通过代码添加监听
01
通过元数据添加监听
操作步骤:
1、打开单据所对应的EditUI界面。
2、选中需要添加事件的控件。
3、打开属性窗口,选中"事件"页签
4、根据Event名称,在Mehod Name列双击之后保存
5、发布对应的UI界面
02
重写方法添加逻辑
操作步骤:
1、打开EditUI界面所对应的java代码界面。
2、根据Mehod Name 重写方法名称
03
通过代码添加监听
/** * output loadFields method */ public void loadFields() { detachListeners(); //添加监听 super.loadFields(); attachListeners(); //删除监听 } /** * 删除监听 */ protected void detachListeners() { removeDataChangeListener(prmtcompany); //公司 removeDataChangeListener(prmtdept); //部门 removeDataChangeListener(txtamount); //金额 removeDataChangeListener(kdtEntrys); //分录 } /** * 添加监听 */ protected void attachListeners() { addDataChangeListener(prmtcompany); //公司 addDataChangeListener(prmtdept); //部门 addDataChangeListener(txtamount); //金额 addDataChangeListener(kdtEntrys); //分录 } /** * 添加监听 * @param com */ protected void addDataChangeListener(JComponent com){ if(com==null) return; final String shortCutName = com.getName(); //下拉框 if(com instanceof KDComboBox){ //判断控件类型 KDComboBox cb = (KDComboBox) com; //转化 cb.addItemListener(new ItemListener(){ //添加监听 public void itemStateChanged(ItemEvent e) { dataChangeControl(shortCutName,e); //监听具体处理方法 } }); }else if(com instanceof KDPromptBox){ //F7控件 KDPromptBox prmt = (KDPromptBox) com; prmt.addDataChangeListener(new DataChangeListener(){ public void dataChanged(DataChangeEvent e) { dataChangeControl(shortCutName,e); } }); }else if(com instanceof KDTable){ //分录表格控件 KDTable table = (KDTable) com; table.addKDTEditListener(new KDTEditAdapter() { public void editStopped(KDTEditEvent e) { dataChangeControl(shortCutName,e); } }); }else if(com instanceof KDFormattedTextField){ //金额控件 KDFormattedTextField numberText = (KDFormattedTextField) com; numberText.addDataChangeListener(new DataChangeListener(){ public void dataChanged(DataChangeEvent e) { dataChangeControl(shortCutName,e); } }); }else if(com instanceof KDCheckBox){ //单选框 KDCheckBox box = (KDCheckBox)com; box.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { dataChangeControl(shortCutName,e); } }); } //只是添加的常用的监听, 也可以自己加入 日期控件 和文本控件的监听 } /** * 删除监听 * @param com *注意 addDataChangeListener 中手动添加的监听 需要在此处进行删除 */ protected void removeDataChangeListener(JComponent com){ if(com==null) return; if(com instanceof KDComboBox){ //下拉框 ItemListener[] listeners = com.getListeners(ItemListener.class); for(int i=0;i<listeners.length;i++){ ((KDComboBox)com).removeItemListener(listeners[i]); } }else if(com instanceof KDPromptBox){ //F7 KDPromptBox box = (KDPromptBox) com; DataChangeListener[] listeners2 = box.getListeners(DataChangeListener.class); for(int i = 0; i < listeners2.length; i++){ box.removeDataChangeListener((DataChangeListener) listeners2[i]); } }else if(com instanceof KDTable){ //分录 KDTable tb = (KDTable) com; KDTEditListener[] listeners2 = tb.getListeners(KDTEditListener.class); for(int i = 0; i < listeners2.length; i++){ tb.removeKDTEditListener((KDTEditListener) listeners2[i]); } }else if(com instanceof KDFormattedTextField){ //金额 DataChangeListener[] listeners = com.getListeners(DataChangeListener.class); for(int i=0;i<listeners.length;i++){ ((KDFormattedTextField)com).removeDataChangeListener(listeners[i]); } }else if(com instanceof KDCheckBox){ //单选框 ChangeListener[] listeners = com.getListeners(ChangeListener.class); for(int i=0;i<listeners.length;i++){ ((KDCheckBox)com).removeChangeListener(listeners[i]); } } } /** * 监听处理方法 * @param shortCut * @param e */ private void dataChangeControl(String shortCut,EventObject e){ //根据shortCut 判断控件,并进入具体处理逻辑 if(shortCut.equals(prmtcompany.getName())){ prmtcompany_DataChange( ); }if(shortCut.equals(kdtEntrys.getName())){ kdtEntrys_editStoped((KDTEditEvent) e); } } /** * 公司值变监听事件 */ private void prmtcompany_DataChange() { //获取控件的值 //CompanyOrgUnitInfo comInfo= (CompanyOrgUnitInfo)prmtcompany.getValue(); //对控件设置值 //prmtcompany.setValue(new CompanyOrgUnitInfo()); } /** * 分录编辑停止事件 * @param e */ private void kdtEntrys_editStoped(KDTEditEvent e) { int rowIndex = e.getRowIndex(); //获取行 String key = kdtEntrys.getColumnKey(e.getColIndex()); //获取当前修改的列 IRow row = kdtEntrys.getRow(rowIndex); //如果改变的列是金额列 或者税率列 if(key.equals("amount")||key.equals("taxRate")){ BigDecimal amount =(BigDecimal) kdtEntrys.getRow(rowIndex).getCell("amount").getValue(); //根据行ID 获取对应的列值 BigDecimal taxRate =(BigDecimal) kdtEntrys.getRow(rowIndex).getCell("taxRate").getValue(); //根据行ID 获取对应的列值 if(taxRate==null || taxRate.compareTo(BigDecimal.ZERO)==0){ kdtEntrys.getRow(rowIndex).getCell("tax").setValue(BigDecimal.ZERO); //根据行ID 设置对应的列值 }else{ BigDecimal tax = amount.divide(taxRate.add(new BigDecimal(100)), 2); //计算税率 kdtEntrys.getRow(rowIndex).getCell("tax").setValue(tax); //根据行ID 设置对应的列值 } // } } /** * 部门添加打开前事件 */ protected void prmtdept_willShow(SelectorEvent e) throws Exception { //在此处可以可以写一些动态的过滤 例如只能选中公司下面的部门 // EntityViewInfo view = new EntityViewInfo(); //创建view 用来过滤 // FilterInfo expenseFilter = new FilterInfo(); //创建filter //用来过滤 // expenseFilter.getFilterItems().add(new FilterItemInfo("isEnabled",true)); //设置过滤条件 只在展示启用状态的数据 // view.setFilter(expenseFilter);// 将filter 放进view // SorterItemCollection sic = new SorterItemCollection(); //设置排序 // SorterItemInfo sicItme = new SorterItemInfo("number");//设置按照编码排序 // sicItme.setSortType(SortType.ASCEND); //设置排序方式 // sic.add(sicItme); // view.setSorter(sic); //排序赋值给 view // prmtcompany.setEntityViewInfo(view);// 给公司字段设置过滤 super.prmtdept_willShow(e); }
因Edit界面相关逻辑代码较多分上中下三篇进行讲解
欢迎加入QQ群:557537072
单据开发-业务单据Edit界面代码中篇(GUI端)
关注公众号获取更多金蝶EAS开发方面的内容因论坛版权要求,部分图片无法显示,可以直接方位微信公众号链接https://mp.weixin.qq.com/s/PkKr...
点击下载文档
本文2024-09-16 22:00:29发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-45349.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章