Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException:Swing的JTree中的0_Java_Swing_Indexoutofboundsexception_Jtree_Jtreetable - Fatal编程技术网

“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException:Swing的JTree中的0

“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException:Swing的JTree中的0,java,swing,indexoutofboundsexception,jtree,jtreetable,Java,Swing,Indexoutofboundsexception,Jtree,Jtreetable,当我试图将int[]的第一个值保存到一个简单的原语时,我得到了一个例外。数组是JTree的一部分 我研究了一段时间其他的话题,基本上找到了答案,从逻辑上说我的数组必须是空的。但事实并非如此!对多维数组和向量的其他引用也不起作用 private void paintSelectionRect() { // Get selected row bounds: System.out.println("Test "+tree.getSelectionRows()[0]); // Outp

当我试图将int[]的第一个值保存到一个简单的原语时,我得到了一个例外。数组是JTree的一部分

我研究了一段时间其他的话题,基本上找到了答案,从逻辑上说我的数组必须是空的。但事实并非如此!对多维数组和向量的其他引用也不起作用

private void paintSelectionRect() {

    // Get selected row bounds:
    System.out.println("Test "+tree.getSelectionRows()[0]); // Output: Test
    System.out.println("Size "+tree.getSelectionRows().length); // Output: Size 1

    if (tree.getSelectionRows() == null) {
        selectedRowBounds = null;
        return;
    }

    int row = tree.getSelectionRows()[0]; // Exception!

    selectedRowBounds = tree.getRowBounds(row);
    // Repaint the JTree:
    tree.repaint();
}
因此,第一个条目的值是4,唯一一个条目的大小是1。此外,它不能为空。那么,为什么System.out.println可以读取,但不能引用int

当我从树中选择一行时,它总是在第一次单击MouseEvent时保存。在添加TreeSelectionListener后调用该方法

TreeSelectionModel selectionModel = tree.getSelectionModel();

    selectionModel.addTreeSelectionListener(new TreeSelectionListener() {

         public void valueChanged(final TreeSelectionEvent e) {
            paintSelectionRect();
        }
    });

    tree.addMouseListener(new MouseAdapter() {

        @Override
        public void mousePressed(MouseEvent e) {
            int row = tree.getClosestRowForLocation(e.getX(), e.getY());

            if (e.getClickCount() == 2) {
                if (tree.isCollapsed(row)) {
                    tree.expandRow(row);
                } else {
                    tree.collapseRow(row);
                }
            } else {
                tree.setSelectionRow(row);
            }
        }
    });
}

考虑提供一个说明你的问题的方法。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应谢谢您的快速回复。刚刚编辑过,希望现在不会那么混乱。我的数组必须是空的,但不是空的!如建议的那样,寻找EDT违规。考虑提供一个演示您的问题。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应谢谢您的快速回复。刚刚编辑过,希望现在不会那么混乱。我的数组必须是空的,但不是空的!根据建议查找EDT违规情况。
TreeSelectionModel selectionModel = tree.getSelectionModel();

    selectionModel.addTreeSelectionListener(new TreeSelectionListener() {

         public void valueChanged(final TreeSelectionEvent e) {
            paintSelectionRect();
        }
    });

    tree.addMouseListener(new MouseAdapter() {

        @Override
        public void mousePressed(MouseEvent e) {
            int row = tree.getClosestRowForLocation(e.getX(), e.getY());

            if (e.getClickCount() == 2) {
                if (tree.isCollapsed(row)) {
                    tree.expandRow(row);
                } else {
                    tree.collapseRow(row);
                }
            } else {
                tree.setSelectionRow(row);
            }
        }
    });
}