在Java中为JTable解析类型为List的hashmap中的值

时间:2016-06-29 04:16:21

标签: java swing list hashmap abstracttablemodel

HashMap<Integer, List<MyFields>> hmapp = new HashMap<>();

我有一个由用户填写的表单,每个用户都有一个分配给他们的keyID,他们必须在填写文本字段时输入。除了包含keyID的文本字段外,他们总共可以回答4个文本字段。

如果同一用户提交相同的文本字段值,则列表不会更改。如果用户提交了不同的表单值,则会将其添加到该keyID的列表中。

例:
keyID:123
firstField:cat
secondField:dog
第三场:43
第四场:鱼

Hashmap将等于: {123 = [猫狗43鱼]}

如果他们提交的内容完全相同,则hashmap不会改变。

如果下一次提交是针对相同的keyID,其中任何字段值与现有值不同,则如下:
keyID:123
firstField:cat
secondField:dog
第三场:43
第四场:鸟类

然后hashmap将如下所示: {123 = [猫狗43鱼,猫狗43鸟]}

另一个示例条目: keyID:456
firstField:house
secondField:store
第三场:53
第四场:鞋子

然后hashmap将如下所示: {123 = [猫狗43鱼,猫狗43鸟],456 = [家庭商店53鞋]}

我使用这些keyID填充列表,当列表中选择了一个项目时,我会触发一个事件来填充一个JTable,它是AbstractTableModel。

表格中有四列与四个文本字段有关。 我想根据列表值填充行。 因此,如果选择了keyID 123,则row1将是相应列下的cat dog 43 fish。 row2将是猫狗43只鸟,在各自的栏目下。

我该如何做到这一点?

private void formListValueChanged(javax.swing.event.ListSelectionEvent evt) {      

    try {
        int keyID = Integer.parseInt(formList.getSelectedValue());
        List<MyFields> lvals = hmapp.get(keyID);

        Object[] lvals2 = hmapp.get(keyID).toArray();

        AbsTable model = (AbsTable) formTable.getModel();

        for (int i = 0; i < lvals.size(); i++) {
            Object[] row = new Object[3];
            for (int j = 0; j < row.length; j++) {
                row[j] = lvals;
            }
            System.out.println(lvals2.length);
            for (Object z : lvals2) {
                System.out.println(z);
            }

        }
        Iterator<MyFields> objVals = lvals.iterator();
        while (objVals.hasNext()) {
            System.out.println(objVals.next());
        }


    } catch (NumberFormatException e) {
        System.out.println("Err: Null list selection.");
    }
}




private class AbsTable extends AbstractTableModel{

    private String[] vals;
    private final int NUM_COL = 4;
    public String[] colNames = new String[]{"first", "second", "third", "fourth"};
    private final Class<?>[] colTypes = new Class<?>[]{String.class, String.class, Integer.class, String.class};

    public AbsTable(){
        vals=hmapp.keySet().toArray(new String[hmapp.size()]);
    }
    @Override
    public int getRowCount() {
        return hmapp.size();
    }

    @Override
    public int getColumnCount() {
        return NUM_COL;
    }


    public void removeRow(int row) {
        fireTableRowsDeleted(row, row);
    }

    @Override
    public Object getValueAt(int rowIdx, int columnIdx) {
        throw new UnsupportedOperationException("Not supported yet."); 
    }

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

    @Override
    public Class<?> getColumnClass(int columnIdx) {
        return colTypes[columnIdx];
    }

}

0 个答案:

没有答案