如何在使用rs2xml填充的Jtable中添加复选框

时间:2015-09-07 20:08:09

标签: java swing jdbc jtable tablemodel

我不知道怎么办我有这个框架我希望填充JTable并添加一个复选框。

public static void update_table() {

        try {

        String sql="SELECT * FROM equipments";
        PreparedStatement update = con.prepareStatement(sql);
        ResultSet result = update.executeQuery();
        table.setModel(DbUtils.resultSetToTableModel(result));
        table.setVisible(true);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

1 个答案:

答案 0 :(得分:2)

我假设您想要添加一个在包含复选框的数据库中找不到的其他列,以便您可以选择行?

如果是这样,那么你可以使用包装器TableModel。

这是一个未经测试的示例,可能有所帮助:

public class CheckBoxWrapperTableModel extends AbstractTableModel
{
    private Map<Integer, Boolean> checkBoxes = new HashMap<Integer, Boolean>();

    private TableModel model;
    private String columnName;

    public CheckBoxWrapperTableModel(TableModel model, String columnName)
    {
        this.model = model;
        this.columnName = columnName;
    }

    @Override
    public String getColumnName(int col)
    {
        return (column > 0) ? model.getColumnName(col - 1) : columnName;
    }

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

    @Override
    public int getColumnCount()
    {
        return model.getColumnCount() + 1;
    }

    @Override
    public Object getValueAt(int row, int col)
    {
        if (col > 0)
            return model.getValueAt(row, col - 1);
        else
        {
            Object value = checkBoxes.get(row);
            return (value == null) ? Boolean.FALSE : value;
        }
    }

    @Override
    public boolean isCellEditable(int row, int col)
    {
        if (col > 0)
            return model.isCellEditable(row, col - 1);
        else
            return true;
    }

    @Override
    public void setValueAt(Object value, int row, int col)
    {
        if (col > 0)
            model.setValue(value, row, col - 1);
        else
            checkBoxes.put(row, value);

        fireTableCellUpdated(row, col);
    }

    @Override
    public Class getColumnClass(int col)
    {
        return (col > 0) ? model.getColumnClass(col - 1) : Boolean.class;
    }
}

如果模型有效,那么您可以使用以下代码的模型:

//table.setModel(DbUtils.resultSetToTableModel(result));
TableModel utilsModel = DbUtils.resultSetToTableModel(result);
TableModel wrapperModel = new CheckBoxWrapperTableModel(utilsModel, "Select");
table.setModel( wrapperModel );