Re: Cannot add Rows java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
In article
<841f1b0a-d0d8-483d-b3f0-991ab2927691@a27g2000prj.googlegroups.com>,
hon123456 <peterhon321@yahoo.com.hk> wrote:
I got the following exception when I try to press Enter in the cell in
order to add a row when the Enter is pressed.
Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
I get the same result as markspace. If I use an unbound key, I get your
result. The problem is invoking fireTableRowsInserted() for a second
time in addRow(). I'm not sure why you override addRow(), which already
provides the required notification.
I'm not sure of your goal, but here's a simplified example of adding a
row to a DefaultTableModel via mouse or keyboard:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class NumericColumnTester extends JFrame {
private DefaultTableModel model_001 = new DefaultTableModel();
private int i;
public NumericColumnTester() {
String[] header = {"Text", "Num 1", "Num 2"};
model_001.setColumnIdentifiers(header);
model_001.addRow(nextRow());
model_001.addRow(nextRow());
JTable table = new JTable(model_001);
table.setRowSelectionAllowed(false);
JScrollPane scrollPane = new JScrollPane(table);
this.add(scrollPane);
this.add(new JButton("Add Row") {
{
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model_001.addRow(nextRow());
}
});
}
}, BorderLayout.SOUTH);
table.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
System.out.println(" Key: " + KeyEvent.getKeyText(key));
if (key == KeyEvent.VK_F16) {
model_001.addRow(nextRow());
}
}
});
}
private Object[] nextRow() {
return new Object[] {
Character.valueOf((char)('a' + i++)),
Integer.valueOf(i),
String.valueOf(i)
};
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new NumericColumnTester();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>