gpt4 book ai didi

java - 如何向 JTree 添加间隙

转载 作者:行者123 更新时间:2023-12-04 06:32:47 26 4
gpt4 key购买 nike

我的问题是这个

我正在尝试创建一个并排显示两棵树的组件。这两棵树通常非常相似,但可能会有一两个不同之处。在有区别的地方,即一个分支有一个分支,另一个没有分支,我希望没有分支的树为它显示一个空的空间,也为它丢失的每个 child 显示一个空的空间。

所以它可能看起来像

左树右树
------------- -------------
+ 根 + 根
| |
-- child A-- child A
| |
-- child B |
| |
-- child C -- child C

使用自定义渲染器删除那些应该是间隙的行的文本和图标是相对直接的。但是,这仍然留下了将 child 连接到 parent 的垂直线的水平线。这是我的问题。

左树右树
------------- -------------
+ 根 + 根
| |
-- child A-- child A
| |
--Child B -- <--我想删除这个
| |
-- child C -- child C

在这个简单的例子中它可能是可以裸露的,但是当丢失的分支也有 child 时,我最终会得到很多连接间隙的小线。

我认为一个潜在的替代方法是为每棵树创建一个列 JTreeTable 并为缺少的分支清空单元格。虽然这将意味着垂直线的一部分也将丢失。

任何帮助、想法或评论都会非常有用。谢谢。

最佳答案

考虑以下:

class ReticentTreeUI extends BasicTreeUI {

private Set<Integer> hiddenRows = new HashSet<Integer>();

public void hideRow(int row) {
hiddenRows.add(row);
}

@Override
protected void paintHorizontalPartOfLeg(Graphics g,
Rectangle clipBounds, Insets insets, Rectangle bounds,
TreePath path, int row, boolean isExpanded,
boolean hasBeenExpanded, boolean isLeaf) {
if (!hiddenRows.contains(row)) {
super.paintHorizontalPartOfLeg(g, clipBounds, insets, bounds,
path, row, isExpanded, hasBeenExpanded, isLeaf);
}
}

@Override
protected void paintRow(Graphics g, Rectangle clipBounds,
Insets insets, Rectangle bounds, TreePath path, int row,
boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf) {
if (!hiddenRows.contains(row)) {
super.paintRow(g, clipBounds, insets, bounds, path, row,
isExpanded, hasBeenExpanded, isLeaf);
}
}

@Override
protected void paintExpandControl(Graphics g, Rectangle clipBounds,
Insets insets, Rectangle bounds, TreePath path, int row,
boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf) {
if (!hiddenRows.contains(row)) {
super.paintExpandControl(g, clipBounds, insets, bounds,
path, row, isExpanded, hasBeenExpanded, isLeaf);
}
}
}

用法示例:
    JTree tree = new JTree();
ReticentTreeUI ui = new ReticentTreeUI();
tree.setUI(ui);
ui.hideRow(2);

关于java - 如何向 JTree 添加间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com