Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arraylist中的Java存储Swing表_Java_Swing_User Interface_Arraylist - Fatal编程技术网

Arraylist中的Java存储Swing表

Arraylist中的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;

我有一个具有属性name和lastname的类Person。Person对象存储在Arraylist中的PersondDatabase中。我还有一个swing表,其中列名为“name”和“lastname”,单元格可编辑

若填写了姓名和姓氏,我想在数据库中创建一个新条目。 例如,当在我的数据库的swing表中填充Joe(姓名)和Jones(姓氏)时,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);
    }
}
班级人员{
字符串名称;字符串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(...)