在jTable中添加复选框

use*_*101 0 java swing jtable jcheckbox

我正在使用swing来创建桌面应用程序.我创建了从数据库提供数据并将其插入Jtable的功能.我想要使用提供附加功能,包括附加列和复选框以及用于删除该perticuler列的按钮(已检查) )单击按钮时.i已使用netbeans并提供最大拖放选项.我无法弄清楚在当前代码中插入复选框实例的方式和位置,用于插入每行的复选框.为了提供每行的复选框,必须生成复选框的多个实例

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    java.sql.Connection con = new DBConnection().getConnection();
    PreparedStatement pst;
    String Q;
    Q = "select * from userregister ";
    try {
        pst = con.prepareStatement(Q);

        ResultSet rs = null;
        rs = pst.executeQuery();
        String a, b, c, d;
        int x = 0;
     //   DefaultTableModel dt = new DefaultTableModel(data, columnNames);
        JCheckBox c1 = new JCheckBox();
        for (int i = 0; rs.next(); i++) {
            a = rs.getString(1);
            b = rs.getString(2);
            c = rs.getString(3);
            d = rs.getString(4);
       jTable2.setValueAt(a, i, 0);
       jTable2.setValueAt(b, i, 1);
       jTable2.setValueAt(c, i, 2);
       jTable2.setValueAt(d, i, 3);
     jTable2.setValueAt(, i,4);
        }


   //jTable1.setAutoscrolls(rootPaneCheckingEnabled);
  // TODO add your handling code here:
    } catch (SQLException ex) {
        Logger.getLogger(NewJFrame1.class.getName()).log(Level.SEVERE, null, ex);
    }
}                                        
Run Code Online (Sandbox Code Playgroud)

这是将数据插入表中的方法.我也想知道我如何能够找出检查哪个复选框以及如何使用该变量来响应多个删除的请求.请帮助

dic*_*c19 6

您必须查看如何使用表格的概念:编辑器和渲染器部分教程.

这个JCheckBox你要找的是默认的渲染器/编辑器Boolean类.说过这个JTable使用TableModel.getColumnClass()来决定正确的渲染器/编辑器.如果使用DefaultTableModel,则前面提到的方法的实现总是返回,Object.class因此您必须覆盖它才能返回Boolean.class.例如,假设第一列将包含布尔值:

DefaultTableModel model = new DefaultTableModel() {
    @Override
    Class<?> getColumnClass(int columnIndex) {
        return columnIndex == 0 ? Boolean.class : super.getColumnClass(columnIndex);
    }
};
Run Code Online (Sandbox Code Playgroud)

在链接教程中对此进行了很好的解释.

附录

此问答中显示了另一种方法:仅在一个JTable Cell中的复选框.当给定列可能包含不同类型的值(布尔值,数字,字符串......)时,这很有用,因此覆盖getColumnClass()是不可行的.不要认为这是你的情况,但它可能会有所帮助.


我也想知道我如何能够找出检查哪个复选框以及如何使用该变量来响应多个删除的请求

只需遍历要求列值的行(true/false).如果它被"选中"(true)则删除它:

TableModel model = table.getModel();
for(int i = 0; i < model.getRowCount(); i++) {
    if((Boolean)model.getValueAt(i, 0)) {
        // delete the row
     }
}
Run Code Online (Sandbox Code Playgroud)

无关

数据库调用是耗时的任务,可能会阻止事件调度线程(也称为EDT)导致GUI无响应.EDT是一个单独的特殊线程,可以在其中创建和更新Swing组件.为避免阻塞此线程,请考虑使用SwingWorker在后台线程中执行数据库调用并更新EDT中的Swing组件.有关详细信息,请参阅Swing trail 中的Concurrency.