Browse Source

REPORT-70504 填报-填报属性设置-数据表搜索时有较大概率多个重复的搜索结果

bugfix/11.0
lucian 3 years ago
parent
commit
54aee8313f
  1. 15
      designer-base/src/main/java/com/fr/design/gui/icombobox/TableSearchTreeComboBox.java

15
designer-base/src/main/java/com/fr/design/gui/icombobox/TableSearchTreeComboBox.java

@ -1,5 +1,6 @@
package com.fr.design.gui.icombobox;
import com.fr.concurrent.NamedThreadFactory;
import com.fr.data.core.DataCoreUtils;
import com.fr.data.core.db.TableProcedure;
import com.fr.data.impl.Connection;
@ -24,6 +25,8 @@ import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.util.Enumeration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 实现模糊搜索表名的FRTreeComboBox
@ -37,6 +40,10 @@ import java.util.Enumeration;
public class TableSearchTreeComboBox extends FRTreeComboBox {
// 持有父容器,需要实时获取其他组件值
private final ChoosePane parent;
/**
* 保证模糊搜索的原子性操作
*/
private final ExecutorService singleExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("TableSearchTreeComboBox"));
public TableSearchTreeComboBox(ChoosePane parent, JTree tree, TreeCellRenderer renderer) {
super(tree, renderer);
@ -69,14 +76,16 @@ public class TableSearchTreeComboBox extends FRTreeComboBox {
*/
private void searchExecute() {
UIComboBoxEditor searchEditor = (UIComboBoxEditor) this.getEditor();
new SwingWorker<Void, Void>() {
String searchText = (String) searchEditor.getItem();
singleExecutor.execute(
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() {
processTableDataNames(
parent.getDSName(),
parent.getConnection(),
parent.getSchema(),
createFilter((String) searchEditor.getItem()));
createFilter(searchText));
return null;
}
@ -86,7 +95,7 @@ public class TableSearchTreeComboBox extends FRTreeComboBox {
// 输入框获取焦点
searchEditor.getEditorComponent().requestFocus();
}
}.execute();
});
}
private TableNameFilter createFilter(String text) {

Loading…
Cancel
Save