Использование набора результатов для добавления динамического JCheckBox - PullRequest
0 голосов
/ 09 сентября 2018

Я видел это Нужно добавить JCheckBox в JTable динамически , но это не помогло, видя, что моя ситуация похожа, но я не уверен, как добавить JCheckBox после того, как я взял raw данные из моей базы данных.

    public void fillAnyTable(ResultSet resultSet, JTable table)throws SQLException{

        //Create new table model
        DefaultTableModel tableModel = new DefaultTableModel();

        //Retrieve meta data from ResultSet
        ResultSetMetaData metaData = resultSet.getMetaData();

        //Get number of columns from metadata
        int columnCount = metaData.getColumnCount();

        //Get all column names from metadata and add columns to table
        for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++){
            tableModel.addColumn(metaData.getColumnLabel(columnIndex));
        }
        //this is when I assume I can create a new column but now how to add the checkbox
        tableModel.addColumn("Check");
        //Create Array of Objects with size of Column count from metadata
        Object[] row = new Object[columnCount];

        //Scroll through Result Set
        while (resultSet.next()){
            //Get object from column with specific index of result set to array of objects
            for (int i = 0; i < columnCount; i++){
                row[i] = resultSet.getObject(i+1);

            }
            System.out.println(Arrays.toString(row));
            //Now add row to table model with that array of objects as an argument
            tableModel.addRow(row);
        }
        //Now we add the table model to the table
        table.setModel(tableModel);
    }
}

Так выглядит вид

This is what the view looks like

1 Ответ

0 голосов
/ 09 сентября 2018

Я не уверен, как добавить JCheckBox после того, как я взял необработанные данные из своей базы данных.

Вы не добавляете JCheckBox. TableModel содержит данные, а не компоненты. Так что вам нужно:

  1. переопределяет метод getColumnClass(...) TableModel для возврата Boolean.class для столбца, в котором вы хотите установить флажок. Тогда таблица будет использовать соответствующий рендерер / редактор для флажка.

  2. добавить Boolean.FALSE в TableModel при добавлении данных из ResultSet.

Таким образом, вы просто добавляете логическое значение, когда заканчиваете добавлять значение каждого столбца в массив строк:

//Now add row to table model with that array of objects as an argument
row[columnCount].add( Boolean.FALSE );
tableModel.addRow(row);

Конечно, вам также нужно увеличить массив "row", чтобы сохранить это значение.

...