在Swing中创建TreeTable

时间:2015-05-19 07:19:00

标签: java swing jtreetable

使用本手册(http://www.comp.nus.edu.sg/~cs3283/ftp/Java/swingConnect/tech_topics/tables-trees/tables-trees.html)我尝试为我的项目的Swing用户界面创建树表。

在我的类的构造函数中,我重新定义了这样的渲染:

public class JTreeTable extends JTable {
    public JTreeTable(ITreeTableModel treeTableModel) {
        super();
        ...
        setDefaultRenderer(ITreeTableModel.class, tree); 
        ...
    }

}

其中treeTableModel是我的

实现
interface ITreeTableModel extends TreeModel

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

enter image description here

  1. 我的代码中的字段(ID)定义为Object,但实际上它代表数字(1,2,3等)。如何更改字段ID的表示?

  2. 我表格中的节点不会展开。 但是

    public int getChildCount(Object parent_object_id)

  3. 返回数字> 0

    P.S。我知道可能没有足够的信息可以直接回答,但我至少需要指导我继续进行调查。

1 个答案:

答案 0 :(得分:0)

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

//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 Renderer返回Object实例元素ID(例如DictionaryItem @ 11abb71),而不是获取对象并调用getID()函数。

您可以在TreeCellRenderer example.

上找到更多示例和信息

与您的第二个问题相关,请参阅TreeModel example上的示例。也许您也可以尝试按代码扩展行。 如果" +"图标正在变为" - "它可能意味着getChildCount运行良好但它不起作用的是getChild(int行),它将返回null或无效的树行元素。