Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to delete a cell from jTable by pressing DELETE key?

Tags:

java

swing

jtable

I have a code like below. I want to delete cell by pressing a delete key. How can I do that? And I also want to add delete button in that field.

private static final long serialVersionUID = -250883760398754970L;
private final LinkedList<Product> list= new LinkedList<Product>();
    private final LinkedList<Boolean> checkList = new LinkedList<Boolean>();
    public void addItem(Product customer) {
    list.add(customer);
    checkList.add(false);
    fireTableDataChanged();

}
@Override
public int getColumnCount() {
        return 6;
}

@Override
public int getRowCount() {
    return list.size();

}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    Object obj = null;

    if(columnIndex==4)
       {
    setTotal(list.get(rowIndex));
    }
             switch (columnIndex){
        case 0: obj= list.get(rowIndex).getCode() ;break;
        case 1: obj=list.get(rowIndex).getDescription(); break;
        case 2: obj=list.get(rowIndex).getQuantity();break;
        case 3: obj=list.get(rowIndex).getPrice();break;            
        case 4: obj=list.get(rowIndex).getTotal();break;
    }
    return obj;
}
    @Override
public Class<?> getColumnClass(int arg0) {

    switch(arg0){
    case 0: case 1: return String.class; 
    case 2: return Integer.class; 
    case 3: case 4: return Double.class;
    }

    return super.getColumnClass(arg0);
}
@Override
public boolean isCellEditable(int arg0, int arg1) {
    boolean isCellEditable = false;
    switch(arg1){
    case 2: case 3: isCellEditable= true;break;
    default: isCellEditable= false;break;
    }
    return isCellEditable;
    //return super.isCellEditable(arg0, arg1);
}


@Override

public void setValueAt(Object arg0, int arg1, int arg2) {
    System.out.println("Value seted" +arg0 + arg1 + arg2);


    switch(arg2){
    case 0: break;
    case 1: break;
    case 2: list.get(arg1).setQuantity((Integer)arg0);             setTotal(list.get(arg1)); break;
    case 3: list.get(arg1).setPrice((Double)arg0); setTotal(list.get(arg1));break;          
    case 4: list.get(arg1).setTotal((Double)arg0);break;



       //case 0: checkList.set(arg1, (Boolean)arg0);break;
       default:break;
    }
    //list.get(arg1).setTotal((Double)arg0);
    fireTableDataChanged();
}



public LinkedList<Product> getList() {
    LinkedList<Product> temp = new LinkedList<Product>();
    int index=-1;
    for(Boolean isSelected:checkList){
        index++;
        if(isSelected){
            temp.add(list.get(index));
        }
    }
    return temp;
}


public void setTotal(Product product){
    Double total = 0.0d;
    total = product.getQuantity ()* product.getPrice();
    product.setTotal(total);

}

Is it possible with this code? Thank you.

like image 417
Balkrushn Viroja Avatar asked Oct 20 '12 06:10

Balkrushn Viroja


1 Answers

You'll want to bind the delete key to the table.

Take a look at How to use Key Bindings for more details

InputMap inputMap = table.getInputMap(WHEN_FOCUSED);
ActionMap actionMap = table.getActionMap();

inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete");
actionMap.put("delete", new AbstractAction() {
    public void actionPerformed(ActionEvent evt) {
       // Note, you can use getSelectedRows() and/or getSelectedColumns
       // to get all the rows/columns that have being selected
       // and simply loop through them using the same method as
       // described below.
       // As is, it will only get the lead selection
       int row = table.getSelectedRow();
       int col = table.getSelectedColumn();
       if (row >= 0 && col >= 0) {
           row = table.convertRowIndexToModel(row);
           col = table.convertColumnIndexToModel(col);
           table.getModel().setValueAt(null, row, col);
       }
    }
});

This is just an example. You could delete an entire row with the same idea, so long as your table model supported it.

like image 76
MadProgrammer Avatar answered Nov 15 '22 00:11

MadProgrammer