java - 在java中使用TreeViewer [Antlr4]仅显示完整的树而不是层次结构数据

标签 java swift treeview antlr4 jtree

我正在使用在How to Display ANTLR Tree GUI上找到的这个但它只像图像一样显示完整的树,我需要有类似于 JTree 的分层树。这可能吗?

import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.gui.TreeViewer;

/**
 * A simple demo to show AST GUI with ANTLR
 * @see http://www.antlr.org/api/Java/org/antlr/v4/runtime/tree/gui/TreeViewer.html
 * 
 * @author wangdq
 * 2014-5-24
 *
 */
public class HelloTestDrive {
    public static void main(String[] args) {
        //prepare token stream
        CharStream stream = new ANTLRInputStream("hello antlr");
        HelloLexer lexer  = new HelloLexer(stream);   
        TokenStream tokenStream = new CommonTokenStream(lexer);
        HelloParser parser = new HelloParser(tokenStream);
        ParseTree tree = parser.r(); 

        //show AST in console
        System.out.println(tree.toStringTree(parser));

        //show AST in GUI
        JFrame frame = new JFrame("Antlr AST");
        JPanel panel = new JPanel();
        TreeViewer viewr = new TreeViewer(Arrays.asList(
                parser.getRuleNames()),tree);
        viewr.setScale(1.5);//scale a little
        panel.add(viewr);
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200,200);
        frame.setVisible(true);
    }
}

I am getting the right side, but I also want to get the left side of this image

最佳答案

如果我正确理解您的问题,您希望能够通过用户交互来展开或折叠树中的分支。 ANTLR 的 TreeViewer 不支持此功能,因此无法开箱即用。

我没有为您准备好代码,但我认为您最好的方法是转换 ANTLR 的 ParseTree Swing JTree通过链接 Swing TreeNode在一起。这种映射非常简单,并且允许您完全定制。

如果您确实想使用 ANTLR 的表示形式,则必须调整 TreeViewer.java支持这些用户交互。

关于java - 在java中使用TreeViewer [Antlr4]仅显示完整的树而不是层次结构数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351988/

相关文章:

ios - 触摸时黑色叠加层消失在 UIImageView 背景上

c# - 如何在 C# 中向 TreeNode 类添加更多值

java - tomcat ExpiresFilter 不起作用

java - 从响应实体 json 获取一个字段

swift - 为什么我不能在自定义单元格中为 UIImageView 创建@IBOutlet

swift - Web 服务响应后填充 TableView

java - 如何在spring中使用java配置设置bean

java - maven安装过程中出现奇怪的异常,但构建成功

c# - 如何以编程方式单击 TreeView TreeNode,使其在列表中突出显示并触发 AfterSelect 事件?

qt - 从 qstandarditemmodel 数据形成树结构