标签: treecellrenderer

将图标设置为Jtree中的每个节点

我想为我的JTree中的每个节点设置一个不同的图标,实际上我是从数据库中加载每个节点,使用"while",我将每个图标设置为root,leaf或parent.像这样:

我的所有声明都是全球性的:

private ResultSet myResultSet;
protected DefaultTreeModel treeModel;
private DefaultMutableTreeNode rootNode,childNode,parent1,parent2;
Run Code Online (Sandbox Code Playgroud)

这是我设置节点的代码:

myResultSet=rtnNodes(); /*Method that returns a RS with my nodes*/
while(myResultSet.next()){
  switch(myResultSet.getInt(1)){  /*The first column is the type of node: root, parent, leaf...*/
    case 0: treeModel = new DefaultTreeModel((rootNode=new DefaultMutableTreeNode(myResultSet.getString(2)))); break;  /*root node*/
    case 1: case 4: parent1 = parent2 = makeNode(rootNode); break;  /*parent node*/
    case 2: makeNode(parent2); break;  /*leaf node*/
    case 3: parent2 = makeNode(parent1); break;  /*sub patern node*/
  } /*makeNode is the method where I create the …
Run Code Online (Sandbox Code Playgroud)

java swing treenode jtree treecellrenderer

9
推荐指数
2
解决办法
2万
查看次数

渲染时更改JTree行高调整大小的行为

我想在节点为SELECTED时使用包含三个文本字段的自定义TreeCellRenderer,而在节点未选择时使用默认渲染器.问题是虽然我为面板设置了合适的首选大小和最小大小,但JTree不会更新编辑的行高.相反,当我使用相同的面板作为编辑器时,它被正确呈现.

有人可以解释为什么会这样吗?
是否有推荐的方法来实现类似于编辑的渲染大小调整行为?
JTree是否提供了直接设置它的方法,还是有必要扩展JTree或(更糟)L&F?

注意: 在深入研究BasicTreeUI.startEditing(TreePath path, MouseEvent event)方法后,我注意到以下几行代码.他们似乎负责编辑大小调整:

if(editorSize.width != nodeBounds.width ||
   editorSize.height != nodeBounds.height) {
    // Editor wants different width or height, invalidate
    // treeState and relayout.
    editorHasDifferentSize = true;
    treeState.invalidatePathBounds(path);
    updateSize();
    // To make sure x/y are updated correctly, fetch
    // the bounds again.
    nodeBounds = getPathBounds(tree, path);
}
else
    editorHasDifferentSize = false;

tree.add(editingComponent);
editingComponent.setBounds(nodeBounds.x, nodeBounds.y,
                           nodeBounds.width,
                           nodeBounds.height);
Run Code Online (Sandbox Code Playgroud)

这是一个SSCCE,显示了不同的编辑和渲染行为.

  • 未选择节点时,将使用默认渲染器.
  • 通过在节点上单击一次,将选择节点并使用面板渲染器.
  • 通过在节点上单击两次,开始编辑并使用面板编辑器.

如您所见,仅在编辑期间才能正确呈现面板.

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout; …
Run Code Online (Sandbox Code Playgroud)

java swing jtree treecellrenderer

6
推荐指数
1
解决办法
2095
查看次数

如何动态设置Jtree节点图标

我想为分组和未分组的节点显示单独的图标。我创建了一个自定义TreeCellRender。下面给出了我的示例代码。在for循环中,奇数一个节点有一个图标,偶数有另一个图标。但不更改节点的图标。在我的应用程序中,填充来自数据库的树节点并根据某些条件进行分组。这是一个示例可运行代码。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;

public class TestTree extends JDialog {

    JTree tree;

    DefaultTreeModel treeModel;

    public TestTree() {
        setSize(300, 800);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        System.out.println(getContentPane().getBackground());
    }

    protected static ImageIcon createImageIcon(String path) throws MalformedURLException {
        java.net.URL imgURL = new URL(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    public void init() throws MalformedURLException …
Run Code Online (Sandbox Code Playgroud)

java swing jtree treecellrenderer

4
推荐指数
1
解决办法
4164
查看次数

更改DefaultMutableTreeNode的文本样式

我创建了一个自定义JTree.可以过滤该树以仅显示包含给定条件(字符串)的那些节点.现在,有没有办法只扩展那个包含搜索字符串的DefaulMutableTreeNode部分?

如果树节点具有label ="StackOverflow"并且用户正在搜索包含"Stack"的节点,则"StackOverflow"节点将以"Stack"部分粗体呈现.

怎么实现呢?

java swing jtree treecellrenderer

3
推荐指数
1
解决办法
3577
查看次数

JTree:为各个组设置自定义打开/关闭图标

  1. 我知道如何在JTree中设置自定义叶图标
  2. 我知道如何为所有组节点设置自定义关闭/打开图标

但我无法根据组节点名称设置自定义打开/关闭图标,例如节点可以称为电子邮件(因此有一个包络图标很好)或者一组可能被称为任务等等.

我试图通过重写getTreeCellRendererComponent类的方法来做到这一点DefaultTreeCellRenderer

但是改变icon当前的电流node只会影响下一个节点!

如何为各个组设置自定义打开/关闭图标?

请看一下我的代码:

Employee.java

package com.ehsunbehravesh.swing;

import java.util.Random;

public class Employee {

  public String name;
  public int id;
  public boolean isBoss;
  public Employee[] employees;

  public Employee(String name, boolean isBoss) {
    this.name = name;
    this.isBoss = isBoss;
    this.id = new Random(System.currentTimeMillis()).nextInt(Integer.MAX_VALUE);
  }  

  @Override
  public String toString() {
    return this.name;
  }

    static String randomName() {
    String chars = "abcdefghijklmnopqrstuvwxyz";
    StringBuilder builder = new StringBuilder();
    Random r = new Random(System.currentTimeMillis());
    int length …
Run Code Online (Sandbox Code Playgroud)

java icons swing jtree treecellrenderer

2
推荐指数
2
解决办法
1万
查看次数

在生成树之后动态添加图标时调整JTree节点名称的大小

在我的代码中,根据条件,JTree节点可能有也可能没有Icon.我的问题是当我想Icon为节点设置时,节点名称的大小减小并且附加" ... ".

所以基本上,节点根据图标大小重新计算其大小并适合其余部分.

如何在添加图标时阻止此行为并允许节点扩展其大小?

这是没有/带图标的屏幕截图:

在此输入图像描述

java swing jtree treecellrenderer

1
推荐指数
1
解决办法
1424
查看次数

根据节点中存储的数据突出显示 jtree 中的特定节点

我有一个显示 jTree 的应用程序。树中的每个节点都有一个布尔字段,称为flagged指示它是否需要用户注意。

如果该字段是 true,那么我希望它以红色突出显示,否则不突出显示。

什么是实现这一目标的好方法?我应该延长DefaultTreeCellRenderer吗?实现我自己的自定义TreeCellRenderer?还有什么方法?

java swing jtree treecellrenderer

1
推荐指数
1
解决办法
817
查看次数

标签 统计

java ×7

jtree ×7

swing ×7

treecellrenderer ×7

icons ×1

treenode ×1