【问题标题】:Java store Swing table in ArraylistJava 在 Arraylist 中存储 Swing 表
【发布时间】: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 exampleShort, Self Contained, Correct Example

标签: java swing user-interface arraylist


【解决方案1】:

是的,我有一个方法 addRowToEnd

因此,您需要在应用程序逻辑的某处调用该方法,以将空的 Person 对象添加到“PersonDatabase”。

public void setValueAt(...)

调用此方法仅更新单个单元格。您不应该尝试调用数据库的 newEntry(...) 方法。

相反,您需要访问该行的当前 Person 对象,然后根据您要更新的列更新名字或姓氏。

因此,更简单的解决方案是将 Person 对象的 ArrayList 存储在 PersonTableModel 中。注意不要调用你的类TableModel,这是一个接口名称,会造成混淆。使用更具描述性的名称。

查看Row Table Model,了解有关创建自定义 TableModel 的分步示例。

【讨论】:

  • 非常感谢非常有用的链接。
猜你喜欢
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 2013-12-17
  • 1970-01-01
  • 2015-04-29
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多