bos 分录监听根据变化类型改变颜色

本文介绍了一种在软件中根据变更单的增减类型动态调整显示颜色的方法。当类型为减少时,相关单元格字体颜色将变为红色,以直观地突出显示减少的数据,便于用户快速识别关键信息。
  //变更单根据增减类型变化改变这行的颜色  如果是减少 类型为0 颜色为红色
    
    @Override
	public void kdtE1_Changed(int rowIndex, int colIndex) throws Exception {
		// TODO Auto-generated method stub
    	   for (int i = 0; i < this.kdtE1.getRowCount(); i++) {
    		    Object value = this.kdtE1.getCell(i, "changeType").getValue();
    	        if ( 
    	          ("减少".equals(value.toString() ))){
    	           //如果是减少的类型 cell.getStyleAttributes().getFont().setColor(color);
    	        	this.kdtE1.getCell(i, "salNumber").getStyleAttributes().setFontColor(new Color(255, 0, 0));
    	        	this.kdtE1.getCell(i, "actualNumber").getStyleAttributes().setFontColor(new Color(255, 0, 0));
    	        }else{
    	        	this.kdtE1.getCell(i, "salNumber").getStyleAttributes().setFontColor(new Color(0, 0, 0));
    	        	this.kdtE1.getCell(i, "actualNumber").getStyleAttributes().setFontColor(new Color(0, 0, 0));
    	        }
    	      }
	}

 

 

 

<think>我们正在讨论的是EAS BOS系统中如何自定义重写分录删除按钮的实现。根据用户的问题,他想要在分录上自定义删除按钮的为。在EAS BOS中,分录(通常是多分录表格)的删除按钮默认为可能不满足特定需求,因此需要重写。 在EAS BOS中,自定义按钮功能通常通过重写相应的事件处理逻辑来实现。对于分录删除按钮,我们需要在UI的控制器(一般是ListUI类)中找到删除按钮的事件处理,并进重写。 步骤概述: 1. 找到分录表格对应的删除按钮。 2. 为删除按钮添加自定义的事件监听器。 3. 在事件监听器中实现自定义的删除逻辑。 注意:在EAS BOS中,通常使用Eclipse SWT/JFace作为UI框架,因此我们需要使用SWT的事件处理机制。 具体步骤: ### 1. 定位删除按钮 在ListUI(列表界面)的代码中,通常会有创建工具栏按钮的代码。我们需要找到删除按钮(可能是名为`deleteAction`或类似的Action对象)。如果默认的删除按钮已经存在,我们可以获取它并替换其事件处理。 ### 2. 重写删除事件 我们可以通过移除原有的选择监听器,然后添加我们自己的监听器,或者直接修原有Action的`run`方法(如果允许的话)。但是,更常见的做法是继承原有的Action类并重写`run`方法,或者创建一个新的Action来替换原有的删除Action。 ### 3. 实现自定义删除逻辑 在自定义的删除逻辑中,我们可以加入一些业务判断,例如删除前的校验,或者删除后更新其他界面元素等。 ### 示例代码 以下是一个示例,展示如何在ListUI中重写分录删除按钮的功能。假设我们有一个分录表格`entryTable`,我们想要在删除分录之前进确认,并记录删除日志。 ```java public class MyListUI extends ListUI { // 原有的删除Action private Action deleteAction; @Override protected void createActions() { super.createActions(); // 获取原有的删除Action deleteAction = getAction("delete"); // 假设通过某个方法获取删除Action if (deleteAction != null) { // 移除原有的删除Action removeAction(deleteAction.getId()); // 创建自定义的删除Action Action myDeleteAction = new Action("删除") { @Override public void run() { // 获取当前选中的分录 ITable entryTable = getEntryTable(); // 假设这个方法返回分录表格 int[] selectedIndices = entryTable.getSelectionIndices(); if (selectedIndices.length == 0) { return; } // 自定义逻辑:删除前进确认 if (!MessageDialog.openConfirm(getShell(), "确认删除", "确定要删除选中的分录吗?")) { return; } // 执删除操作(这里可以加入更多自定义逻辑,如记录日志等) // 注意:实际删除分录可能需要调用业务逻辑层的方法,这里仅示意 for (int i = selectedIndices.length - 1; i >= 0; i--) { int index = selectedIndices[i]; // 从分录表格中移除 entryTable.remove(index); } // 刷新界面 entryTable.refresh(); } }; // 设置新Action的ID和原Action相同,以便替换 myDeleteAction.setId(deleteAction.getId()); addAction(myDeleteAction); } } } ``` ### 注意事项 - 上述代码仅为示例,实际开发中需要根据具体的业务场景和EAS版本进调整。 - 删除分录可能涉及业务逻辑,例如需要更新分录对应的数据模型,或者调用后台服务进删除操作。因此,在删除分录时,不仅要删除表格中的,还要更新底层的数据模型(如分录集合)。 - 在EAS中,分录表格通常与一个`EntryTable`对象关联,而删除操作需要同时更新UI和模型。 ### 引用说明 在EAS BOS开发中,自定义按钮功能是常见的需求,上述方法基于EAS的UI框架和Action机制实现[^1][^2]。 §§相关问题§§ 1. 在EAS BOS中如何为分录添加自定义按钮? 2. EAS BOS中如何实现删除分录前的业务校验? 3. EAS BOS中如何获取分录表格的选中数据?</think>### EAS BOS 自定义重写分录删除按钮的实现 在 EAS BOS 系统中重写分录删除按钮功能,主要通过以下步骤实现: --- ### 1. **定位分录删除按钮事件** 在 ListUI 或 EditUI 类中,分录删除按钮通常通过 `Action` 实现。需要找到对应的删除 Action 定义: ```java // 通常在 createActions() 方法中 deleteAction = new Action("删除") { @Override public void run() { // 默认删除逻辑 } }; ``` --- ### 2. **重写删除逻辑** 通过继承覆盖原有 Action 的 `run()` 方法: ```java @Override protected void createActions() { super.createActions(); // 保留原有动作 // 替换默认删除Action deleteAction = new Action("删除") { @Override public void run() { //==== 自定义逻辑开始 ==== // 1. 获取选中分录 int[] indices = entryTable.getSelectionIndices(); if (indices.length == 0) return; // 2. 业务校验(示例:检查数量是否大于0) for (int i : indices) { BigDecimal qty = UIRuleUtil.getBigDecimalValue( entryTable.getCell(i, "qty").getValue() ); if (qty.compareTo(BigDecimal.ZERO) > 0) { MessageDialog.openError(getShell(), "错误", "数量大于0的分录不可删除!"); return; } } // 3. 执删除(保留原始逻辑) super.run(); // 4. 删除后刷新界面 refreshEntryTable(); //==== 自定义逻辑结束 ==== } }; } ``` --- ### 3. **关键 API 说明 | **对象/方法** | **作用** | |----------------------------------|----------------------------------| | `entryTable.getSelectionIndices()` | 获取分录表格选中索引 | | `UIRuleUtil.getBigDecimalValue()` | 转换分录字段值为数值(如数量、金额) | | `entryTable.remove(indices)` | 删除指定分录(需同步数据模型) | | `refreshEntryTable()` | 刷新分录表格显示 | --- ### 4. **高级场景处理** **场景1:级联删除关联数据** ```java // 在删除分录后同步删除子表数据 super.run(); // 先执默认删除 for (int i : indices) { SubEntryDAO.deleteByParent(entryTable.getRow(i).getID()); } ``` **场景2:动态控制按钮状态** ```java // 在selectionChanged事件中 @Override public void selectionChanged(SelectionChangedEvent event) { boolean canDelete = validateDeletion(); // 自定义校验 deleteAction.setEnabled(canDelete); } ``` --- ### 5. **部署与调试** 1. 将自定义 UI 类注册到元数据: ```xml <UI class="com.xxx.custom.MyListUI"/> <!-- List界面 --> <UI class="com.xxx.custom.MyEditUI"/> <!-- 编辑界面 --> ``` 2. 调试技巧: - 使用 `MessageDialog.openInformation()` 显示中间结果 - 重写 `beforeDelete()`/`afterDelete()` 等扩展点 > **注意**:重写时需保留 `super.run()` 调用确保基础功能完整,除非需要完全替换删除逻辑[^1][^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值