Arraylist中的Java存储Swing表
我有一个具有属性name和lastname的类Person。Person对象存储在Arraylist中的PersondDatabase中。我还有一个swing表,其中列名为“name”和“lastname”,单元格可编辑 若填写了姓名和姓氏,我想在数据库中创建一个新条目。 例如,当在我的数据库的swing表中填充Joe(姓名)和Jones(姓氏)时,Joe Joe是一个新条目,但它应该是Joe JonesArraylist中的Java存储Swing表,java,swing,user-interface,arraylist,Java,Swing,User Interface,Arraylist,我有一个具有属性name和lastname的类Person。Person对象存储在Arraylist中的PersondDatabase中。我还有一个swing表,其中列名为“name”和“lastname”,单元格可编辑 若填写了姓名和姓氏,我想在数据库中创建一个新条目。 例如,当在我的数据库的swing表中填充Joe(姓名)和Jones(姓氏)时,Joe Joe是一个新条目,但它应该是Joe Jones class Person { String name; String lastname;
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);
}
}
班级人员{
字符串名称;字符串lastname;
...
}
公共类PersonDatabase{
ArrayList persons=新建ArrayList();
public newEntry(String name,String lastname){//将一个人添加到
//数据库
添加(新人员(姓名、姓氏));
}
}
类TabelModel扩展了AbstractTableModel{
PersonDatabase db=新的PersonDatabase()
私有字符串[]columnNames={“name”,“lastname”};
私有向量行=新向量();
@凌驾
公共对象getValueAt(int行索引、int列索引){
字符串[]行=(字符串[])行。获取(行索引);
返回行[列索引];
}
@凌驾
公共布尔值isCellEditable(int-rowIndex、int-columnIndex){
返回true;
}
@凌驾
public void setValueAt(Object aValue,int rowIndex){
rows.get(rowIndex)[columnIndex]=aValue;
int tmp=columnIndex++;
db.newEntry((String)aValue,(String)getValueAt(rowIndex,tmp);
//这里我想向数据库中添加一个人
fireTableCellUpdated(行索引、列索引);
}
}
任何帮助都将不胜感激
是的,我有一个addRowToEnd方法
因此,您需要在应用程序逻辑的某个地方调用该方法,以便将空Person对象添加到“PersonDatabase”中
调用此方法仅用于更新单个单元格。您不应尝试调用数据库的newEntry(…)
方法
相反,您需要访问该行的当前Person对象,然后根据要更新的列更新名字或姓氏
因此,一个更简单的解决方案是将Person对象的ArrayList存储在PersonTableModel中。注意不要调用类TableModel
,这是一个接口名称,容易混淆。请使用更具描述性的名称
查看有关创建自定义TableModel的分步示例。如果您有一个
Person
对象,您应该使用行中的对象。
数据模型中的对象。“数据库是Joe Joe的新条目,但它应该是Joe Jones”-因此,我假设您有将行插入数据库的代码?这可能是问题所在。当调用setValueAt
时,您需要确定两件事。人员是否填写了名和姓。这需要您检查指定行的值。您应该创建新的entr添加行(…)中的y
method,如果您想创建一个空行,可能是一个带有默认值的条目;如果您想创建一个显示名称的行,可能是一个带有输入数据的条目。setValueAt应该更改正在对其执行操作的行的对象的状态。@MadProgrammer是的,我有一个addRowtoEnd方法。要更快地获得更好的帮助,请发布或。非常感谢非常有用的link。
public void setValueAt(...)