Guolf3377
Guolf3377

Reputation: 107

Add different JLists to cell renderer in JTable

I'm able to create a JTable with cells rendered to use JList. What I don't know to do is to create different lists to add to cells.

This is my code right now

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);

Where should I send a Vector, for example, to change JList items for each row?

Thanks

Upvotes: 1

Views: 88

Answers (1)

Channa Jayamuni
Channa Jayamuni

Reputation: 1905

It can do better way as follows. You should not set the renderer within a loop. Only thing you should create the data vector correctly.

Modifications of your code

    //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);

Create Data Vector as follows.

Use loops and create your own code referring this

    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;
    }

Upvotes: 1

Related Questions