gpt4 book ai didi

java - 如何将对象从表格单元格编辑器传递到表模型?

转载 作者:行者123 更新时间:2023-11-30 04:16:35 24 4
gpt4 key购买 nike

首先,由于我对 Java Swing 的了解很少,如果我无法以方便的方式表达我的问题,我深表歉意。

我有一个包含 4 列的 JTable。 JTable单元格是可编辑的并包含一个 AbstractTableModel。当第一个单元格进入编辑模式时,我想显示一个带有列表的对话框(我已经做得很好)。从列表中选择数据后,它返回一个对象(我可以访问该对象)。但作为编辑器,JTextField 会显示对象中的一个子值(我也这样做了)。但是,当单元格将其位置更改为另一个单元格时,JTable 使用 setValueAt 方法将值放入表模型中。但这次它只返回编辑器保存的文本。事实上它应该返回一个对象以将该对象放入表模型中。

我不明白当 JTable 自动触发将单元格值放入表模型时,如何保存 TableCellEditor 类中的对象并将其传递给 setValueAt?为了更好地理解,我在下面提到了我的代码。

public class myobject {
public String id;
public String name;
public String tag;
}


public class My_Table_Cell_Editor extends AbstractCellEditor implements TableCellEditor {

private myobject curr_val;

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

Component c = table.getEditorComponent();

if(c==null){
return null;
}

if(column == 0){

MyDialog dg = new MyDialog(null,true);

dg.setVisible(true);

if("OK".equals(dg.button_state)){

((JTextField)c).setText(dg.return_record.record_name);

curr_val = dg.return_record; // return_record is myobject

fireEditingStopped();
}
}

((JTextField)c).selectAll();

return c;
}

@Override
public Object getCellEditorValue() {
return curr_val;
}
}

public class myTableModel extends AbstractTableModel{

Other codes are as usual...

@Override
public void setValueAt(Object value, int row, int col) {
rec_model rec = rec_arr.get(row);

switch (col) {
case 0:
rec.myobj = (myobject) value;
break;
}
rec_arr.set(row, rec);
fireTableCellUpdated(row, col);
}
}

最佳答案

如何保存来自 TableCellEditor 类的对象并将其传递给 setValueAt() 何时 JTable 自动触发将单元格值放入表格模型?

正如所讨论的here ,您不应该:“表的 editingStopped() 方法通过 getCellEditorValue() 收集新值,并将其用于 setValueAt()模型。” TableCellEditor 无需 fireEditingStopped()。为了帮助理解,我发现在调试器中中断 editingStopped() 来检查调用堆栈很有帮助。

关于java - 如何将对象从表格单元格编辑器传递到表模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18194240/

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