首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在TreeTable中创建DebugSession

如何在TreeTable中创建DebugSession
EN

Stack Overflow用户
提问于 2016-11-03 14:27:55
回答 1查看 73关注 0票数 0

我正在寻找一种在intellij插件中创建TreeTable的方法。我可以在com.intellij.xdebugger.XDebugProcess#createTabLayouter,中创建DebugSession中的选项卡,但是我不能在JPanel中创建一个TreeTable。

我的观点如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
    <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="debugger.ui.RegisterViewSessionTab">
      <grid id="27dc6" binding="content" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
        <margin top="0" left="0" bottom="0" right="0"/>
        <constraints>
          <xy x="20" y="20" width="500" height="400"/>
        </constraints>
        <properties/>
        <border type="none"/>
        <children>
          <scrollpane id="86eac">
            <constraints>
              <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
            </constraints>
            <properties/>
            <border type="none"/>
            <children>
              <component id="8217" class="com.intellij.ui.treeStructure.treetable.TreeTable" binding="tree" custom-create="true">
                <constraints/>
                <properties/>
              </component>
            </children>
          </scrollpane>
        </children>
      </grid>
    </form>

而代码滞后(RegisterViewSessionTab):

代码语言:javascript
复制
    pc = new DefaultRegisterNode();
    sp = new DefaultRegisterNode();
    DefaultRegisterNode group = new DefaultRegisterNode();

    group.setName("Core Registers");
    group.setDescription("Core Registers");
    group.setValue("");
    DefaultMutableTreeNode root = new DefaultMutableTreeNode(group);

    pc.setName("PC");
    pc.setDescription("Program Counter [Core]");
    pc.setValue("---");
    DefaultMutableTreeNode nodePc = new DefaultMutableTreeNode(pc);
    root.add(nodePc);

    sp.setName("SP");
    sp.setDescription("Stack Pointer [Core]");
    sp.setValue("---");

    DefaultMutableTreeNode node = new DefaultMutableTreeNode(sp);
    root.add(node);

    ColumnInfo[] columnInfos = new ColumnInfo[3];
    columnInfos[0] = new ColumnInfo<DefaultMutableTreeNode, String>("Name") {
        @Nullable
        @Override
        public String valueOf(DefaultMutableTreeNode defaultRegisterNode) {
            return ((DefaultRegisterNode)defaultRegisterNode.getUserObject()).getName();
        }
    };
    columnInfos[1] = new TableModelEditor.EditableColumnInfo<DefaultMutableTreeNode, String>("Value") {
        @Nullable
        @Override
        public String valueOf(DefaultMutableTreeNode defaultRegisterNode) {
            return ((DefaultRegisterNode)defaultRegisterNode.getUserObject()).getValue();
        }

        @Nullable
        @Override
        public TableCellEditor getEditor(DefaultMutableTreeNode defaultRegisterNode) {
            return new StringTableCellEditor(project);
        }

        @Override
        public void setValue(DefaultMutableTreeNode defaultRegisterNode, String value) {
            ((DefaultRegisterNode)defaultRegisterNode.getUserObject()).setValue(value);
        }
    };
    columnInfos[2] = new ColumnInfo<DefaultMutableTreeNode, String>("Description") {
        @Nullable
        @Override
        public String valueOf(DefaultMutableTreeNode defaultRegisterNode) {
            return ((DefaultRegisterNode)defaultRegisterNode.getUserObject()).getDescription();
        }
    };

    ListTreeTableModelOnColumns registersModel = new ListTreeTableModelOnColumns(root, columnInfos);
    tree = new TreeTable(registersModel);

模型类:

代码语言:javascript
复制
public class DefaultRegisterNode {
    private String name;
    private String description;
    private String value;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return null;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

行动:http://i.imgur.com/RN2w5mT.jpg

但是没有折叠的/展开的按钮?如何在TreeTable中启用此功能?

如果您需要更多的东西,请联系我!谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-21 08:10:41

使用TreeTableView,根节点也将显示。但错误并不存在。我找到了。

代码语言:javascript
复制
ColumnInfo[] columnInfos = new ColumnInfo[] {
    new TreeColumnInfo("Name"),   // <-- This is important!
    new ColumnInfo<Node, String>("Name S1") {
       ...
    }
};

向上面的TreeColumnInfo添加一个ColumnInfos。这将添加展开/折叠箭头。现在,您必须创建一个TreeCellRenderer并将其设置为树。

代码语言:javascript
复制
public static class Tree extends TreeTableView {

    public Tree(ListTreeTableModelOnColumns treeTableModel) {
        super(treeTableModel);

        setTreeCellRenderer(new Renderer());
    }

    class Renderer extends ColoredTreeCellRenderer  {
        @Override
        public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
            Node node = (Node)value;
            NodeModel model = node.getUserObject();

            append(model.Name);
        }

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

https://stackoverflow.com/questions/40404104

复制
相关文章

相似问题

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