mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12:58 +08:00
fix: tree root node not displaying
This commit is contained in:
@@ -4,9 +4,11 @@ import app.termora.Disposable;
|
||||
import app.termora.DocumentAdaptor;
|
||||
import com.formdev.flatlaf.extras.components.FlatTextField;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.JTree;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.EventListenerList;
|
||||
import javax.swing.event.TreeModelEvent;
|
||||
@@ -117,7 +119,7 @@ public class FilterableTreeModel implements TreeModel, Disposable {
|
||||
private void rebuildAndNotify(TreeModelEvent event) {
|
||||
rebuildFilteredTree();
|
||||
notifyTreeStructureChanged(event);
|
||||
if (expand) {
|
||||
if (expand && Arrays.stream(filters).anyMatch(Filter::canFilter)) {
|
||||
expandAllNodes(tree, getRoot(), new TreePath(getRoot()));
|
||||
}
|
||||
}
|
||||
@@ -194,7 +196,7 @@ public class FilterableTreeModel implements TreeModel, Disposable {
|
||||
* @return true如果通过所有过滤器
|
||||
*/
|
||||
private boolean passesFilter(Object node) {
|
||||
return Arrays.stream(filters).allMatch(filter -> filter.filter(node));
|
||||
return Arrays.stream(filters).allMatch(filter -> !filter.canFilter() || filter.filter(node));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -221,6 +223,18 @@ public class FilterableTreeModel implements TreeModel, Disposable {
|
||||
for (TreeModelListener listener : listeners) {
|
||||
listener.treeStructureChanged(evt);
|
||||
}
|
||||
|
||||
// 修复 “我的主机” 在过滤时新增文件夹会自动隐藏的问题
|
||||
if (event != null) {
|
||||
final TreePath treePath = event.getTreePath();
|
||||
final Object lastPathComponent = treePath.getLastPathComponent();
|
||||
if (lastPathComponent instanceof SimpleTreeNode<?> c) {
|
||||
final SimpleTreeNode<?> parent = c.getParent();
|
||||
if (StringUtils.equals("0", c.getId()) || (parent != null && StringUtils.equals("0", parent.getId()))) {
|
||||
SwingUtilities.invokeLater(() -> SwingUtilities.updateComponentTreeUI(tree));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -183,6 +183,10 @@ class WelcomePanel(private val windowScope: WindowScope) : JPanel(BorderLayout()
|
||||
|| node.host.username.contains(text)
|
||||
}
|
||||
|
||||
override fun canFilter(): Boolean {
|
||||
return searchTextField.text.isNotBlank()
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
searchTextField.addKeyListener(object : KeyAdapter() {
|
||||
|
||||
@@ -3,4 +3,6 @@ package app.termora.tree
|
||||
interface Filter {
|
||||
|
||||
fun filter(node: Any): Boolean
|
||||
|
||||
fun canFilter() = true
|
||||
}
|
||||
Reference in New Issue
Block a user