From 8dfb80ad6f02c647e3d16c62e35e60db60515b31 Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 19 May 2022 09:34:20 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-71890=20=E9=87=8D=E6=96=B0=E5=8A=A0?= =?UTF-8?q?=E4=B8=8A=20=E4=BD=BF=E7=94=A8refresh=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/data/datapane/ChoosePane.java | 48 +++++++++++++++++-- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java index 74a41ea7c..2cb3a9681 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java @@ -649,11 +649,49 @@ public class ChoosePane extends BasicBeanPane 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, Void>() { + + @Override + protected List 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(); } /**