" AWT-EventQueue的-0" java.lang.ArrayIndexOutOfBoundsException:在Swing的JTree中为0

时间:2015-08-19 00:25:59

标签: java swing indexoutofboundsexception jtree jtreetable

当我尝试将int[]的第一个值保存到一个简单的原语时,这是我得到的异常。该数组是JTree

的一部分
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0

我现在研究了其他主题一段时间,并且大部分都找到了答案,逻辑上我的数组必须是空的。但事实并非如此!对多维数组和向量的其他引用也没有任何作用。

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);
            }
        }
    });
}

0 个答案:

没有答案