当前位置: 首页 > 面试题库 >

java.lang.ArrayIndexOutOfBoundsException:0> = 0,尝试填充JTable

谢奕
2023-03-14
问题内容

我将JTable子类化,并使用DefaultTableModel建模我的表数据。下面的类设置JTable,并向模型添加一行。

import java.io.File;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.JTable;  
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class SelectedFileTable extends JTable {
Vector<File> SelectedFiles = new Vector<File>(); 
DefaultTableModel Model    = new DefaultTableModel();

TableColumn ColumnName     = new TableColumn();
TableColumn ColumnSize     = new TableColumn();
TableColumn ColumnRmIcon   = new TableColumn();

ImageFilenameFilter Filter = new ImageFilenameFilter();

public SelectedFileTable() {
    super();
    this.setModel(Model);

    ColumnName.setHeaderValue(new String("Name") );
      ColumnName.setMinWidth(200);
    ColumnSize.setHeaderValue(new String("Size") );
      ColumnSize.setMinWidth(50); 
      ColumnSize.setMaxWidth(100);
    ColumnRmIcon.setHeaderValue(new String("Remove?") );
      ColumnRmIcon.setMaxWidth(100);
      ColumnRmIcon.setResizable(false);

    this.addColumn(ColumnName);
    this.addColumn(ColumnSize);
    this.addColumn(ColumnRmIcon);

    this.setShowVerticalLines(false);
    this.setShowHorizontalLines(true);
this.setAutoCreateColumnsFromModel(true);

this.addFile( new File("C:/temp/cfk.jpg") );
}
public void addFile(File file) {
    System.out.println("FileTable adding: " + file.getName() );
    if ( file.isDirectory() ) { 
        for ( File f : file.listFiles(Filter) ) {
            this.addFile(f);
        }
    } else { 
        if ( Filter.accept(file) ) {
            System.out.println("Accepting file; " + file.getName() );
            SelectedFiles.add(file);
            {
                String name = file.getName();
                Long size = new Long( file.length() );
                String tempstr = new String("X");

                System.out.println("RowItems before: " + Integer.toString(Model.getRowCount()) );
                Model.addRow( new Object[] { name, size, tempstr } );
                Model.fireTableDataChanged(); 
                System.out.println("RowItems start : " + Integer.toString(Model.getRowCount()) );
            }
            System.out.println("Done Accepting file; " + file.getName() );
        }
    }
}
public Iterator<File> iterator() { 
    return SelectedFiles.iterator();
}

}

在显示/可视化时,将引发以下异常:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:432)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:622)
at javax.swing.JTable.getValueAt(JTable.java:1903)
at javax.swing.JTable.prepareRenderer(JTable.java:3911)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1897)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
at javax.swing.JComponent.paintComponent(JComponent.java:743)
at javax.swing.JComponent.paint(JComponent.java:1006)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JViewport.paint(JViewport.java:728)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:559)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4979)
at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4925)
at javax.swing.JComponent.paint(JComponent.java:996)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1709)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:254)
at java.awt.Component.dispatchEventImpl(Component.java:4060)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

我正在扯头发-我还无法找到这个非常简单的用例的根本原因。


问题答案:

我认为您需要在TableModel中添加列。您的代码将UI列添加到表中,但不将其添加到模型中



 类似资料:
  • rank ▲ ✰ vote url 77 340 83 533 url 给字符串填充0 有什么方法可以给字符串左边填充0,这样就可以有一个特定长度. 字符串: >>> n = '4' >>> print n.zfill(3) >>> '004' 对于数字: >>> n = 4 >>> print '%03d' % n >>> 004 >>> print format(4, '03') # pyt

  • 我正在为视频列表设置一个填充。当分辨率为854x480时,它起作用,当我切换到1280x720时,它就不起作用了。这很可能是因为奇数,正如这个问题中所述:FFmpeg pad滤波器计算错误宽度 这是我的原始代码(创建过滤器复杂部分的bash脚本): 我改变了垫宽和垫高的计算,但误差是一样的。 这是一个错误: [Parsed_pad_19@0x558B4FE3BB40]输入区域0:0:1280:67

  • 问题内容: 昨天我有一个完美的工作代码,其确切形式为: 它将很好地填充到00000001。 现在,我使用twoKeyChar从表中获取字符串,并在lastRecord从表中获取int来提高了档次。 如您所见,该概念本质上是相同的-我将一个int转换为一个字符串,并尝试用0填充它;但是,这次我得到以下错误: 代码如下: 我觉得我肯定输入了错误的内容,因为自上次使用以来,没有理由让它中断。任何帮助/提

  • 问题内容: 抛出异常是否表明数组大于索引?如果不是,那是什么意思,为什么?我该如何纠正? 线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:在jumpyear.LeapYear.main(LeapYear.java:13)时为0 问题答案: 该数组不包含任何元素- 它是一个空数组。因此,当您要求数组中的第一个元素(索引中包含的元素)时,数组会说“索

  • 问题内容: 我正在查看Mozilla的代码,该代码向Array添加了一个过滤器方法,并且其中的一行代码使我感到困惑。 我从未见过>>>在JavaScript中使用过。 这是什么,它做什么? 问题答案: 它不仅将非数字转换为数字,还将其转换为可以表示为32位无符号整数的数字。 虽然JavaScript的数字是双精度浮点(*),位运算符(,,,和)在对32位整数运算的定义。进行按位运算会将数字转换为3

  • 这里是javascript/react新手。我正试图用api中的数据从引导程序填充表。我制作了两个组件-仪表板。js和CustomTable。js,都是功能性的。就我所知,在仪表板组件上,我需要进行API调用——我已经使用useEffect和axios完成了这项工作。在桌子上。js我需要对列和数据使用useState。我想使我的表成为动态的,包括行和列。看看我的仪表板代码。js。 接下来,我得到了