在JTable中向单元格渲染器添加不同的JLists

时间:2015-09-26 05:18:26

标签: java swing

我能够创建一个JTable,其中单元格被渲染为使用JList。我不知道要做的是创建不同的列表以添加到单元格。

这是我现在的代码

Vector<String> categoryReportColumnNames = new Vector<>();
    categoryReportColumnNames.add("Categorías");
    categoryReportColumnNames.add("Ítems");
    Vector<Vector<String>> categoryReportVector = controller.getCategoryReportVector();
    VectorTableCellRenderer renderer = new VectorTableCellRenderer();
    DefaultTableModel tableModel = new DefaultTableModel(categoryReportVector, categoryReportColumnNames);        
    jCategoryReportTable.setModel(tableModel);
    jCategoryReportTable.setEnabled(false);

    for (int i = 0 ; i < categoryReportVector.size() ; i++){
        Vector<String> categoryItems = controller.getCategoryItems(i);
        renderer.setListData(categoryItems);
        jCategoryReportTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
    }

    jCategoryReport.setVisible(true);

例如,我应该在哪里发送Vector来更改每行的JList项目?

由于

1 个答案:

答案 0 :(得分:1)

它可以做到如下更好的方式。您不应该在循环中设置渲染器。只有你应该正确地创建数据向量。

修改代码

    //create table columns
    Vector<String> categoryReportColumnNames = new Vector<>();
    categoryReportColumnNames.add("Categorías");
    categoryReportColumnNames.add("Ítems");

    //create table data
    Vector<Vector> categoryReportVector = controller.getDataVector();

    //setting the tabel model
    DefaultTableModel tableModel = new DefaultTableModel(categoryReportVector, categoryReportColumnNames);
    jCategoryReportTable.setModel(tableModel);

    //setting the table renderer
    VectorTableCellRenderer renderer = new VectorTableCellRenderer();
    jCategoryReportTable.getColumnModel().getColumn(1).setCellRenderer(renderer);

    //additional modifications
    jCategoryReportTable.setEnabled(false);
    jCategoryReportTable.setRowHeight(100);

按如下方式创建数据向量。

使用循环并参考此

创建自己的代码
    public Vector<Vector> getDataVector() {
        Vector rowOne = new Vector<String>();
        rowOne.add("Row1-Column1");
        Vector rowOneCategories = new Vector();
        rowOneCategories.add("Row1-Column2-Line1");
        rowOneCategories.add("Row1-Column2-Line2");
        rowOneCategories.add("Row1-Column2-Line3");
        rowOne.add(rowOneCategories);

        Vector rowTwo = new Vector<String>();
        rowTwo.add("Row2-Column1");
        Vector rowTwoCategories = new Vector();
        rowTwoCategories.add("Row2-Column2-Line1");
        rowTwoCategories.add("Row2-Column2-Line2");
        rowTwoCategories.add("Row2-Column2-Line3");
        rowTwo.add(rowTwoCategories);

        Vector<Vector> rowData = new Vector<Vector>();
        rowData.add(rowOne);
        rowData.add(rowTwo);

        return rowData;
    }