首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在jTable中添加复选框

在jTable中添加复选框
EN

Stack Overflow用户
提问于 2014-03-27 10:53:40
回答 1查看 8.4K关注 0票数 0

我使用秋千来创建桌面应用程序。我已经创建了从数据库中提供数据的功能,并将其插入到Jtable .now中,我想使用它提供包含附加列的附加工具,其中包含复选框和a按钮,以便在单击该按钮时删除该园艺列(选中),.i使用了netbeans,并且它提供了最大拖放选项。我无法找出如何在当前代码中插入复选框实例的方式和位置,以便为每一行插入复选框。若要为复选框提供每行,必须生成复选框的多个实例。

代码语言:javascript
复制
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);
    }
}                                        

这是将数据插入表中的方法。另外,我还想知道如何才能找出选中了哪个复选框,以及如何使用变量来响应多个删除的请求。请帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 11:08:39

您必须看看概念:编辑和渲染者教程中的如何使用表部分。

您要寻找的这个JCheckBoxBoolean类的默认呈现器/编辑器。话虽如此,JTable还是利用TableModel.getColumnClass()来决定正确的呈现器/编辑器。如果使用DefaultTableModel,上述方法的实现总是返回Object.class,因此必须重写它才能返回Boolean.class。例如,假设第一列将包含布尔值:

代码语言:javascript
复制
DefaultTableModel model = new DefaultTableModel() {
    @Override
    Class<?> getColumnClass(int columnIndex) {
        return columnIndex == 0 ? Boolean.class : super.getColumnClass(columnIndex);
    }
};

这在链接教程中得到了很好的解释。

附录

在这个Q&A:只选中一个JTable单元格中显示了另一种方法。当给定列可能包含不同类型的值(布尔值、数字、字符串.)时,这是非常有用的。因此,覆盖getColumnClass()是不可行的。别以为这是你的案子,但可能会有帮助。

另外,我还想知道如何才能找出选中了哪个复选框,以及如何使用变量来响应多个删除的请求。

只需遍历请求列值的行(true/false)。如果它是"selected“(true),那么删除它:

代码语言:javascript
复制
TableModel model = table.getModel();
for(int i = 0; i < model.getRowCount(); i++) {
    if((Boolean)model.getValueAt(i, 0)) {
        // delete the row
     }
}

离题

数据库调用是耗时的任务,可能会阻塞事件调度线程 (a.k.a )。( EDT)导致GUI失去响应。EDT是一个单独和特殊的线程,其中Swing组件的创建和更新正在进行。为了避免阻塞此线程,请考虑使用SwingWorker在后台线程中执行数据库调用,并更新EDT中的Swing组件。在在Swing中并发跟踪中可以看到更多信息。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22685423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档