【发布时间】:2023-03-15 19:20:02
【问题描述】:
我有一个具有 name 和 lastname 属性的 Person 类。我存储在 PersondDatabase 中的 Arraylist 中的人员对象。另外,我有一个带有列名“名称”和“姓氏”的摆动表,其中包含可编辑的单元格。
如果填写了姓名和姓氏,我想在数据库中创建一个新条目。 例如,当在我的数据库中的 swing Table 中填写 Joe (name) 和 Jones (lastname) 时,Joe Joe 是一个新条目,但它应该是 Joe Jones。
class Person {
String name; String lastname;
...
}
public class PersonDatabase{
ArrayList<Person> persons = new ArrayList<Person>();
public newEntry(String name, String lastname) { // adds a Person to
//Database
persons.add(new Person(name, lastname));
}
}
class TabelModel extends AbstractTableModel {
PersonDatabase db = new PersonDatabase()
private String[] columnNames = { "name", "lastname" };
private Vector<Object[]> rows = new Vector<Object[]>();
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
String[] row = (String[]) rows.get(rowIndex);
return row[columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
@Override
public void setValueAt(Object aValue, int rowIndex) {
rows.get(rowIndex)[columnIndex] = aValue;
int tmp = columnIndex++;
db.newEntry((String)aValue,(String) getValueAt(rowIndex,tmp);
// Here i want to add a Person to Database
fireTableCellUpdated(rowIndex, columnIndex);
}
}
任何帮助将不胜感激。
【问题讨论】:
-
你有一个
Person对象,你应该在你的rows数据模型中使用它们。 “数据库是 Joe Joe 的一个新条目,但它应该是 Joe Jones” - 所以我假设您有将行插入数据库的代码?这很可能是问题所在。当setValueAt被调用时,你需要确定两件事。Person是否填写了名字和姓氏。这应该要求您检查指定行的值 -
您应该在
addRow(...)方法中创建新条目,如果您想创建一个空行,可能是一个具有默认值的条目,或者如果您想创建一个显示名称的行,则可以输入数据. setValueAt 应该改变正在对其行进行操作的对象的状态。 -
@MadProgrammer 是的,我有一个方法 addRowToEnd
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
标签: java swing user-interface arraylist