gpt4 book ai didi

java - 如何通过按 DELETE 键从 jTable 中删除一个单元格?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:20 26 4
gpt4 key购买 nike

我有如下代码。我想通过按删除键删除单元格。我怎样才能做到这一点?我还想在该字段中添加删除按钮。

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);

}

这个代码可以吗?谢谢。

最佳答案

您需要将删除键绑定(bind)到表。

看看How to use Key Bindings了解更多详情

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);
}
}
});

这只是一个例子。您可以使用相同的想法删除整行,只要您的表格模型支持它即可。

关于java - 如何通过按 DELETE 键从 jTable 中删除一个单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12985911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com