AWT-EventQueue-0“java.lang.ArrayIndexOutOfBoundsException:0错误的JTable

时间:2014-03-02 21:39:26

标签: java swing jtable indexoutofboundsexception

我正在尝试从我的SQL数据库中选择日期并放入 JTable ,但我一直收到错误:

  

'AWT-EventQueue-0“java.lang.ArrayIndexOutOfBoundsException:0'

不确定为什么。这是我的代码:

table = new JTable();

try {
    Connection MyConn = null;
    Statement statement = null;
    ResultSet rs = null;

    Class.forName("com.mysql.jdbc.Driver");
    MyConn = DriverManager.getConnection("jdbc:mysql:"
            + "//localhost/eventbooking", "root", "Passw0rd");
    statement = MyConn.createStatement();
    rs = statement.executeQuery("SELECT * FROM `events` WHERE `Date Of Event` = '30/03/2014'");
    int i=0;
    while (rs.next()) {
        Object a = rs.getString("Date Of Event");
        Object b = rs.getString("Tickets Available");
        Object c = rs.getString("Price Of Event");
        Object d = rs.getString("Start Time");

        table.setRowSorter(null);
        table.getModel().setValueAt(a, i, 0 );
        table.getModel().setValueAt(b, i, 1);
        table.getModel().setValueAt(c, i, 2);
        table.getModel().setValueAt(d, i, 3);
        EventDiary.this.add(table);         
        System.out.println(i);
        i++;
    }

1 个答案:

答案 0 :(得分:3)

问题是你正在创建一个默认的JTable,它有一个TableModel,它由一个没有元素的Vector组成。然后你尝试将元素设置在所述向量的索引0处,此时该元素不存在并且vo:你面临一个问题。

例如:

JTable table = new JTable();
table.getModel().setValueAt("i", 0, 0);

System.out.println(table);

结果:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
    at java.util.Vector.elementAt(Vector.java:470)
    at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:665)
    at com.stackoverflow.answer.JTableTest.main(JTableTest.java:9)

以下是例如:

JTable table = new JTable(1, 1);
table.getModel().setValueAt("i", 0, 0);

System.out.println(table);

结果:

  

javax.swing.JTable中[,0,0,0x0,无效,alignmentX = 0.0,alignmentY = 0.0,边界=,旗帜= 251658568,MAXIMUMSIZE =,=的minimumSize,首选大小=,autoCreateColumnsFromModel =真,autoResizeMode = AUTO_RESIZE_SUBSEQUENT_COLUMNS, cellSelectionEnabled =假,editingColumn = -1,editingRow = -1,gridColor = javax.swing.plaf.ColorUIResource [R = 255,G = 255,b = 255],preferredViewportSize = java.awt.Dimension中[宽度= 450,高度= 400],的rowHeight = 16,rowMargin = 1,rowSelectionAllowed =真,selectionBackground已= com.apple.laf.AquaImageFactory $ SystemColorProxy [R = 44,G = 93,b = 205],selectionForeground = com.apple.laf.AquaImageFactory $ SystemColorProxy [R = 255,G = 255,b = 255],即showHorizo​​ntalLines =真,showVerticalLines =真]

因此,如果你想坚持自己的做事方式,你可以事先添加行和列。

另一种方法是:

JTable table = new JTable();

DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addColumn("id");
model.addColumn("name");

Object[] row = new Object[2];
row[0] = 1;
row[1] = "John";

model.addRow(row);

row = new Object[2];
row[0] = 2;
row[1] = "Jack";

model.addRow(row);

for (int i = 0; i < model.getRowCount(); i++) {
    for (int j = 0; j < model.getColumnCount(); j++) {
        System.out.println("column: " + model.getColumnName(j) + ", row #" + i + ", value: " + model.getValueAt(i, j));
    }
}

导致:

column: id, row #0, value: 1
column: name, row #0, value: John
column: id, row #1, value: 2
column: name, row #1, value: Jack