Browse Source

REPORT-71890 重新加上 使用refresh模式

final/10.0
hades 2 years ago
parent
commit
8dfb80ad6f
  1. 48
      designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java

48
designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java

@ -649,11 +649,49 @@ public class ChoosePane extends BasicBeanPane<DataBaseItems> implements Refresha
*/
@Override
public void registerDSChangeListener() {
// do nothing
// 这里dsNameComboBox 实际并不是数据集而是数据连接 不应该响应数据集变化监听 之后 todo 改下名称 引用地方比较多
// 在单例场景 响应数据连接变化应该使用 DesignerContext.getDesignerBean("databasename").refreshBeanElement() 在数据连接变化时已有调用
// 在非单例场景 每次都会重新初始化 不需要刷新
// 综上 这里应该去掉响应数据集的监听
// 还是需要保留 恶心
// 1. 切换工作目录需要依赖这个监听 切换工作目录没有一个数据连接的刷新触发 就很坑
// 2. DesignerContext.getDesignerBean("databasename").refreshBeanElement()有坑 a.调用不全 b.某些场景下 因为注册覆盖 会失效
// 监听内容变成刷新模式 不会覆盖 populate填充内容
this.addAncestorListener(new ManageDsListenerRegisterListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
refreshDsNameComboBox();
}
}));
}
@SuppressWarnings("unchecked")
private void refreshDsNameComboBox() {
if (initWorker != null && !initWorker.isDone()) {
initWorker.cancel(true);
}
dsNameComboBox.setRefreshingModel(true);
initWorker = new SwingWorker<List<String>, Void>() {
@Override
protected List<String> doInBackground() throws Exception {
return getHasAuthConnections();
}
@Override
protected void done() {
try {
FilterableComboBoxModel dsNameComboBoxModel = new FilterableComboBoxModel(get());
String selected = dsNameComboBox.getSelectedItem();
dsNameComboBox.setModel(dsNameComboBoxModel);
dsNameComboBox.setRefreshingModel(true);
dsNameComboBox.setSelectedItem(selected);
dsNameComboBox.setRefreshingModel(false);
} catch (Exception e) {
if (!(e instanceof CancellationException)) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
}
};
initWorker.execute();
}
/**

Loading…
Cancel
Save