gpt4 book ai didi

java - 用于选择的 JTable 模型的适当集合

转载 作者:行者123 更新时间:2023-12-01 11:26:48 25 4
gpt4 key购买 nike

如果表包含用于在第一列中选​​择的复选框以及其他列中的对象属性(因此 boolean 属性不是行中域对象的一部分),那么在 JTable 模型(扩展 AbstractTableModel)中存储数据的最佳集合是什么?这就是我现在所拥有的,但我想一些 map 或列表会更好?

编辑:我需要一些可变集合来保存一对 boolean 值/人,从中我可以轻松检索 boolean 值设置为 true 的所有人。

public class TableModelPerson extends AbstractTableModel {

private String columnName[] = {"Yes/No", "First name", "Last name"};
private Object data[][] = {
{true, new Person("Katy", "Brown")},
{false, new Person("Sam", "Brown")},
{true, new Person("Peter", "Brown")}
};

@Override
public int getRowCount() {
return data.length;
}

@Override
public int getColumnCount() {
return columnName.length;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Person person = (Person) data[rowIndex][1];
switch (columnIndex) {
case 0:
return data[rowIndex][0];
case 1:
return person.getFirstName();
case 2:
return person.getLastName();
}
return "error";
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
data[rowIndex][columnIndex] = aValue;
fireTableDataChanged();
}

@Override
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(0, columnIndex).getClass();
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
return true;
}
return false;
}

@Override
public String getColumnName(int column) {
return columnName[column];
}

public List<Person> getAllSelectedPersons() {
List<Person> lista = new ArrayList<>(1);
for (int i = 0; i < data.length; i++) {
if (data[i][0] == true) {
lista.add(new Person((String) data[i][1], (String) data[i][2]));
}
}
return lista;
}

public void addPerson(Person person){
// code for adding a person
}

public void removePerson(Person person){
//code for removing person
}

}

已编辑:我也许找到了解决方案:

    private List<Map.Entry<Boolean, Person>> boolPerson = new ArrayList<>();

public List<Person> getPersonsSelected(){
List<Person> personList = new ArrayList<>();
for(Map.Entry<Boolean, Person> entry : boolPerson){
if(entry.getKey()){
personList.add(entry.getValue());
}
}
return personList;
}

但是,我仍然想知道是否有更好的?

我本来想发布一张 table 的照片,但我不能,因为这是我的第一个问题,所以请温柔点:)

最佳答案

看看Row Table Model 。只有第一部分与这个问题相关。它展示了如何创建自定义 PersonTableModel

在示例中,Person 存储在 List 中,并根据列参数使用 Person 类中适当的 getter 方法获取数据。在您的情况下,您希望将 boolean 值与人员分开,因此您还需要为所有 boolean 值提供单独的存储。

然后您需要自定义所有方法以考虑额外的 boolean 列。例如,您可以自定义 getColumnClass() 方法,如下所示:

@Override
public Class getColumnClass(int column)
{
switch (column)
{
case 0: return Boolean.class; // added
case 3: return Date.class; // changed
default: return String.class;
}
}

因此,我建议您首先使用博客中的代码让代码适用于简单的 Person 类,以了解创建自定义 TableModel 的基础知识。然后进行进一步的自定义以在开头添加 boolean 列。

关于java - 用于选择的 JTable 模型的适当集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30757226/

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