首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swing中创建TreeTables

在Swing中创建TreeTables
EN

Stack Overflow用户
提问于 2015-05-19 07:19:00
回答 1查看 2.8K关注 0票数 5

使用这个手册(主题/表-树/表-trees.html),我试图为我的项目的Swing用户界面创建树表。

在表类的构造函数中,我重新定义了如下呈现:

代码语言:javascript
复制
public class JTreeTable extends JTable {
    public JTreeTable(ITreeTableModel treeTableModel) {
        super();
        ...
        setDefaultRenderer(ITreeTableModel.class, tree); 
        ...
    }

}

其中treeTableModel是我的实现

代码语言:javascript
复制
interface ITreeTableModel extends TreeModel

在结果表中,我看起来很接近我想要的,但我有几个问题:

  1. 字段(ID)在我的代码中定义为Object,但实际上它表示数字(1、2、3等)。如何更改字段ID的表示?
  2. 表中的节点不展开。但 公共int getChildCount(对象parent_object_id)

返回数>0

附注:我知道可能没有足够的资料可作直接答覆,但我至少须有方向才能继续进行调查。

EN

回答 1

Stack Overflow用户

发布于 2015-06-25 08:13:25

与第一个问题有关,您应该实现一个TreeCellRenderer。猜测你会做一些类似的事情:

代码语言:javascript
复制
//and override also all the other functions of TreeCellRenderer
public Component getTreeCellRendererComponent(JTree tree, Object value,
      boolean selected, boolean expanded, boolean leaf, int row,
      boolean hasFocus) {
    Component returnValue = null;
    if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
      Object userObject = ((DefaultMutableTreeNode) value)
          .getUserObject();
      if (userObject instanceof YourClass) {
        YourClass yourElement = (YourClass) userObject;
        if(col==0) titleLabel.setText(yourElement.getID());
        if(col==1) titleLabel.setText(yourElement.getName());
        if(col==2) titleLabel.setText(yourElement.getParentID());
        if (selected) {
          renderer.setBackground(backgroundSelectionColor);
        } else {
          renderer.setBackground(backgroundNonSelectionColor);
        }
        renderer.setEnabled(tree.isEnabled());
        returnValue = renderer;
      }
    }
    if (returnValue == null) {
      returnValue = defaultRenderer.getTreeCellRendererComponent(tree,
          value, selected, expanded, leaf, row, hasFocus);
    }
    return returnValue;
  }
}

当前发生的情况是您的Cell返回对象实例元素ID (例如DictionaryItem@11abb71),而不是获取对象并调用getID()函数。

您可以找到关于TreeCellRenderer例子。的额外示例和信息。

与您的第二个问题有关,请参见TreeModel实例上的示例。也许您也可以尝试通过代码展开行。如果"+“图标更改为"-”,这可能意味着getChildCount运行良好,但它不起作用的是getChild(int行),它将返回null或无效的树行元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30319107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档