gpt4 book ai didi

java - Jtable编辑时不会保存单元格的数据

转载 作者:行者123 更新时间:2023-12-02 03:25:02 25 4
gpt4 key购买 nike

我有一个 JTable,其中有一列可编辑。它应该获取整数值并更新表。但是,当我编辑一个单元格并转到另一个单元格时,数据将被删除并返回到空,但程序不会抛出任何异常。我该如何修复它?

public class FoodListPanel extends JPanel{
JTable jTable;
FoodTableModel fm;

public FoodListPanel() {

try {
fm = new FoodTableModel(FoodDAO.getAllFoodsFromDB(), new ArrayList<Integer>());

jTable = new JTable(fm) {

public boolean isCellEditable(int data, int columns) {
if(columns<5){
return false;
}
else if(columns ==5){
return true;
}
else if(columns ==6){

if(getValueAt(data, 5)==Boolean.FALSE){
return false;
}
else {
return true;
}
}
else{
return true;
}
}

public Component prepareRenderer(TableCellRenderer r, int data, int columns) {
Component c = super.prepareRenderer(r, data, columns);
return c;
}


};


jTable.setPreferredScrollableViewportSize(new Dimension(650, 420));
jTable.setFillsViewportHeight(true);

JScrollPane jScrollPane = new JScrollPane(jTable);

add(jScrollPane);

} catch (SQLException e) {
e.printStackTrace();
}
}

class FoodTableModel extends AbstractTableModel {
protected String[] cols = {"نام‌غذا", "دسته‌بندی", "قیمت", "توضیحات", "عکس" , "تعداد"};
protected Class[] colClasses = {String.class, Integer.class, String.class, String.class,
JLabel.class, Integer.class};
ArrayList<Food> al;
ArrayList<Integer> vals;
public FoodTableModel(ArrayList<Food> foods, ArrayList<Integer> val) {
al = new ArrayList<Food>();
al.addAll(foods);


vals = new ArrayList<Integer>(al.size());

vals.addAll(val);

}


////// TODO: 8/20/16 make dynamic from DB
public int getColumnCount (){return cols.length;}
public int getRowCount (){return al.size();}
public String getColumnName(int col) { return cols[col]; }
public Class getColumnClass(int col) { return colClasses[col]; }

public Object getValueAt(int row, int col){
switch (col) {

case 0:
return al.get(row).getName();
case 1:
return al.get(row).getType();
case 2:
return al.get(row).getPrice();
case 3:
return al.get(row).getDiscreption();
case 5:
if(vals.size()>= al.size()) return vals.get(row);

default:
return null;
}
}

////https://stackoverflow.com/questions/39066012/index-out-of-bound-exception-when-setting-value-to-jtable
public void setValueAt(Object vlaue, int row, int column){
if (column==6){
this.vals.set(row, (Integer)vlaue);
}
this.fireTableCellUpdated(row, column);
this.fireTableDataChanged();

}

/*public void setCols(String[] columns){
cols = columns;
}
public void setClasses(Class[] classes){
colClasses = classes;
}*/
}
}

最佳答案

the data will erase and goes back to null

您的 getValuaAt(..)setValueAt() 方法不同步。

setValueAt() 中,您仅保存第 6 列的数据。

getValueAt() 中,您仅返回第 0-5 列的数据,并为第 6 列返回 null。

您需要修复 getValueAt(...) 方法以返回实际数据,而不是 null。

此外,setValueAt(...) 方法应仅调用 fireTableCellUpdated(...) 方法,而不是 fireTableDataChanged(...) 方法。

关于java - Jtable编辑时不会保存单元格的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39067067/

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