- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有可以过滤的 JXTreeTable。当我过滤关键字时,会设置一个新模型。对我来说效果很好。
现在我想展开所有过滤的结果。为此,我保存找到匹配节点的位置。 (它不可能是一片叶子。)
对于该位置,我使用以下方法创建一个 TreePaths 列表:
public TreePath getPath(TreeNode node) {
List<TreeNode> list = new ArrayList<TreeNode>();
while (node != null) {
list.add(node);
node = node.getParent();
}
Collections.reverse(list);
return new TreePath(list.toArray());
}
现在我迭代这个列表并调用expandPath(在设置新模型之后)其中 getTreePaths() 是我用之前的方法创建的 TreePaths 列表。
for (TreePath elem : f.getTreePaths()) {
tree.expandPath(elem);
tree.scrollPathToVisible(elem);
}
但是没有任何效果,只是展开了根,所有的子项都折叠了。在 TreePath 中,最后一个元素不是叶子。在这个循环的 System.out 中,我得到了所有:
-1真的真的正确
System.out.println(tree.getRowForPath(elem)); System.out.println(f.isPathValid(elem,tree.getTreeTableModel()));System.out.println(tree.isVisible(elem));System.out.println(tree.isExpanded(elem));
getRowForPath 的 -1 可能是问题所在?
isPathValid():
public boolean isPathValid(TreePath path,TreeTableModel model) {
if (path.getPathCount() == 0) {
return model.getRoot().equals(path.getPathComponent(0));
}
for (int x = 1; x < path.getPathCount(); x++) {
if (model.getIndexOfChild(path.getPathComponent(x - 1),
path.getPathComponent(x)) == -1) {
return false;
}
}
return true;
}
最佳答案
我知道这是一篇旧帖子,但在花了一个小时解决类似问题后,我会将我的发现放在这里。
方法“isPathValid”仅通过检查子项 (x) 是否属于父项 (x - 1) 来验证序列是否正确,但不会验证根是否与表模型相同(除非路径计数为零)。
在过滤时,您通常会触发表模型的新根,因此,如果您在更新模型(并触发新根)“之前”捕获了 TreePaths,则表将无法找到该路径,尽管该路径本身是有效的。
它应该可以通过一些更改来工作:
public **List** getPath(TreeNode node) {
List<TreeNode> list = new ArrayList<TreeNode>();
**while (node != model.getRoot()) {**
list.add(node);
node = node.getParent();
}
Collections.reverse(list);
**return list;**
}
**for (List elem : f.getTreePaths()) {**
elem.add(0, model.getRoot());
tree.expandPath(new TreePath(elem.toArray());
tree.scrollPathToVisible(elem);
}
关于java - 过滤后的JXTreeTable ExpandPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23363739/
这里仍然是一个 Java 新手,为了我自己的利益,我正在努力尝试一些过于先进的东西。不过,这是我需要做的:JXTreeTable 中的一个复选框。我的主要类(class): package info.
我正在尝试理解 JXTreeTable ,因为我引用了一个站点来进行简单的 JXTreeTable 实现:下面是修改后的代码(我从一个站点中选择它) import java.awt.BorderLay
在 JXTreeTable 中是否可以有可变大小的行,如果是那么如何? ,我正在尝试更改 TreeExpansionEvent 上行的高度(如下所示): public void treeExpande
来自SwingLabs Forum ,似乎没有计划让 JXTreeTable 可排序。 从线程中,另一种选择是 “您可以使用 JXTable 和 GlazedLists TreeList 来制作 Tr
我正在尝试在 JXTreeTable 上添加固定列。我用过Fixed Column Table并做了一些调整以使其正常工作,但我遇到了崩溃事件的问题。当我在固定侧折叠节点时,它不会在移动侧折叠。 见下
当底层模型发生变化时,我无法找到重新绘制 JxTreeTable 的最佳方法。 对于表中的每个节点,我都有一个对应的模型对象,因此如果模型发生变化,我可以获得该节点。 此后,给定一个节点,您如何触发表
我正在使用默认情况下对表进行行条纹的外观。当我放入 JXTreeTable 时,我注意到由于某种原因它没有自动获取行 strip 化。 所以我使用荧光笔提出了一种解决方法,但看起来我遇到了重画故障:
可编辑的 JxTreeTable 是否有任何工作示例。我确实尝试了一些方法。但没有运气......只有第一列是可编辑的。 如何使所有列都可编辑? 对不起各位, 这是我的源代码: /* * To cha
这真的让我很困惑。到目前为止我将展示我的代码。我正在尝试使某些字段可编辑。这是最终目标,但我只是尝试放入 JCheckBox 只是为了测试。但即使这样似乎也不起作用。 你能看一下这个吗?我真的很感激。
我有一个 JXTreeTable,它的左侧有一棵节点树(不同的数据类型),右侧有一个网格(默认)。 现在我希望所有显示的值(还有树标题)均取自 getValueAt(row,column) 方法,而不
使用 Java 代码,我试图操作另一个外部 Java swing 应用程序,但我无法访问该应用程序的任何有关其编码方式的信息。具体来说,我正在尝试操作 JXTreeTable。其中 boolean 类
谁能提供一个具体的例子来说明如何使 JXTreeTable 可编辑? 具体来说,我想让一列中的所有单元格都可编辑。开箱即用似乎并不支持此功能。 最佳答案 JXTreeTable具有常规 JTable
我有一个带有自定义单元格渲染器的 JXTreeTable。当一行中的字段与上一行中的字段不同时,我试图让一行的背景颜色发生变化。例如,该行包含“1”作为 ID。如果前一行也包含“1”,我希望这一行被涂
我想创建一个简单的 JXTreeTable,所以我构建了以下代码: public static void main(String[] args){ JTreeTable table = new
要防止 JTree 节点折叠,您可以使用 setExpandedState() 方法。 我没有看到 SwingX JXTreeTable 类的类似方法,并且 JXTreeTable 似乎没有扩展 JX
我将尝试为 JXTreeTable 实现 RowFilter,但它不起作用。我的实现是这样的: public class CustomRowFilter extends RowFilter { @Ov
我正在使用JXTreeTable来制作树表结构,现在我想动态更改特定单元格的颜色。如何改变单元格的颜色? 我发现这段代码可以改变颜色,但这不起作用。 这里是代码: leftTree.setDefaul
我正在尝试为 JXTreeTable 的树列设置自定义树单元格编辑器,但由于某种原因,我的编辑器从未被调用。 这是应该设置编辑器的位: dataTable.setDefaultEditor(DataE
我正在使用 JXTreeTabble 构建一个 treetable,我想根据所选值禁用/启用 menu 项目。所以,我尝试将此代码放入我的表模型中: public Object getValueAt(
我想使用 JComboBox 作为 JXTreeTable 中的单元格编辑器.它适用于标准 DefaultCellEditor(即 开始点击次数 等于 2)。 现在我希望只需单击一次 即可编辑该列。所
我是一名优秀的程序员,十分优秀!