|
|
|
@ -133,17 +133,8 @@ public class TableDataComboBox extends UIComboBox implements Prepare4DataSourceC
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 刷新数据源并更新下拉框的模型和选中项 |
|
|
|
|
* <p> |
|
|
|
|
* - 更新下拉框模型时,会暂时记录当前选中项,并在刷新后恢复选中项 |
|
|
|
|
* - 通过标记 `refreshModel`,避免刷新模型时触发不必要的选中事件 |
|
|
|
|
* <p> |
|
|
|
|
* 关于 `refreshModel` 的作用: |
|
|
|
|
* 1. **抑制事件触发**:下拉框模型在调用 `addElement` 方法时会触发 `fireItemStateChanged` 事件, |
|
|
|
|
* 2. **处理异步和顺序问题**:由于取数的异步执行会导致回调后的UI操作与 `populateBean` 方法调用顺序出现交错 |
|
|
|
|
* (例如:先执行 `refresh` 的取数操作,然后调用 `populateBean`,最后刷新模型) |
|
|
|
|
* 确保刷新模型但不触发选中事件,以避免引发不必要的逻辑干扰 |
|
|
|
|
* |
|
|
|
|
* @param source 数据源,用于刷新model |
|
|
|
|
* @param source 数据源,用于刷新模型 |
|
|
|
|
*/ |
|
|
|
|
public void refresh(TableDataSource source) { |
|
|
|
|
UIUtil.executeAsyncTaskAndUpdateUI( |
|
|
|
@ -152,18 +143,31 @@ public class TableDataComboBox extends UIComboBox implements Prepare4DataSourceC
|
|
|
|
|
setDsMap(); |
|
|
|
|
return null; |
|
|
|
|
}, |
|
|
|
|
result -> { |
|
|
|
|
result -> refreshComboBoxModel() |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 刷新下拉框模型,同时保留当前选中的数据项 |
|
|
|
|
* <p> |
|
|
|
|
* 1. 获取下拉框中当前选中的数据项 |
|
|
|
|
* 2. 刷新下拉框的模型(清空并重新填充数据),此操作会重置选中的数据项 |
|
|
|
|
* 3. 在刷新模型后,恢复之前选中的数据项 |
|
|
|
|
* <p> |
|
|
|
|
* 关于 `refreshModel` 的作用: |
|
|
|
|
* 1. **抑制事件触发**:下拉框模型在调用 `addElement` 方法时会触发 `fireItemStateChanged` 事件, |
|
|
|
|
* 通过标记 `refreshModel`,可以在刷新过程中抑制此事件 |
|
|
|
|
* 2. **处理异步和顺序问题**:由于取数操作是异步的,可能会导致回调后的 UI 操作与其他逻辑(如 `populateBean`)的调用顺序交错。 |
|
|
|
|
* 标记 `refreshModel` 可确保在刷新模型时,不触发选中事件,从而避免逻辑干扰 |
|
|
|
|
* 3. **逻辑清晰性**:刷新模型本质上是更新数据源的操作,不应触发与用户交互相关的选中事件,避免对上层逻辑造成额外负担 |
|
|
|
|
*/ |
|
|
|
|
private void refreshComboBoxModel() { |
|
|
|
|
refreshModel = true; |
|
|
|
|
// 获取当前选中的数据项
|
|
|
|
|
TableDataWrapper selectedItem = getSelectedItem(); |
|
|
|
|
// 刷新model,本次操作会重置选中的数据项
|
|
|
|
|
refreshComboBoxModel(); |
|
|
|
|
// 刷新model后恢复选中的数据项
|
|
|
|
|
refreshModel(); |
|
|
|
|
updateSelectedItem(selectedItem); |
|
|
|
|
refreshModel = false; |
|
|
|
|
} |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected void setResMap(TableDataSource source) { |
|
|
|
|
this.resMap = DesignTableDataManager.getAllEditingDataSet(source); |
|
|
|
@ -173,7 +177,7 @@ public class TableDataComboBox extends UIComboBox implements Prepare4DataSourceC
|
|
|
|
|
dsMap = DesignTableDataManager.getAllDataSetIncludingProcedure(resMap); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void refreshComboBoxModel() { |
|
|
|
|
private void refreshModel() { |
|
|
|
|
//创建ComboBox模型并设置
|
|
|
|
|
DefaultComboBoxModel model = new DefaultComboBoxModel(); |
|
|
|
|
this.setModel(model); |
|
|
|
|