Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

KeyListener in a JTable makes row deletion difficult

35 views
Skip to first unread message

jonasf...@yahoo.se

unread,
Dec 25, 2005, 4:03:19 PM12/25/05
to
Hello all,

I'm struggling with this code snippet. A selected row in a table is to
be deleted when the delete key is pressed. The row deleted turns out to
be the row BELOW the one selected.
Running exactly this code from a button instead (no key listener) gives
correct behaviour.

I cannot figure out why it does this. Any help appreciated.


table.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
int c = e.getKeyCode();

if (c == KeyEvent.VK_DELETE) {
int[] index = table.getSelectedRows();
e.consume();

for (int i=index.length -1; i >= 0; i--)
tableModel.removeRow(index[i]);

}
}
});


Thanks
/Jonas, Gothenburg, Sweden

hiwa

unread,
Dec 25, 2005, 7:00:32 PM12/25/05
to
No problem:
--------------------------------------------------------------------------------------------------
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;

public class TableDelete{
JFrame frame;
Container con;
JScrollPane scr;
JTable table;
DefaultTableModel model;

String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};

Object[][] data = {
{"Mary", "Campione",
"Snowboarding", new Integer(5), new Boolean(false)},
{"Alison", "Huml",
"Rowing", new Integer(3), new Boolean(true)},
{"Kathy", "Walrath",
"Knitting", new Integer(2), new Boolean(false)},
{"Sharon", "Zakhour",
"Speed reading", new Integer(20), new Boolean(true)},
{"Philip", "Milne",
"Pool", new Integer(10), new Boolean(false)},
{"Anne", "Campione",
"Swimming", new Integer(6), new Boolean(false)},
{"Michael", "Huml",
"Baseball", new Integer(13), new Boolean(true)},
{"Wanda", "Walrath",
"Skating", new Integer(8), new Boolean(false)},
{"Zdeh", "Zakhour",
"Football", new Integer(11), new Boolean(true)},
{"Hornic", "Milne",
"Kayac", new Integer(9), new Boolean(false)}
};

public TableDelete(){
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
con = frame.getContentPane();

model = new DefaultTableModel(data, columnNames);
table = new JTable(model);
scr = new JScrollPane(table);
con.add(scr, BorderLayout.CENTER);

table.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {


int c = e.getKeyCode();
if (c == KeyEvent.VK_DELETE) {
int[] index = table.getSelectedRows();
e.consume();

for (int i=index.length - 1; i >= 0; --i){
model.removeRow(index[i]);
}
}
}
});

frame.pack();
frame.setVisible(true);
}

public static void main(String[] args){
new TableDelete();
}
}
--------------------------------------------------------------------------------------------------------

0 new messages