【问题标题】:How do I add a column of JCheckBox to a JTable via SQL? [duplicate]如何通过 SQL 将一列 JCheckBox 添加到 JTable? [复制]
【发布时间】:2019-04-22 05:15:17
【问题描述】:

我从存储在 SQL 数据库中的数据创建了一个JTable。基本上,我的列数在JTable 中是固定的。现在我想添加一列,允许用户使用特定行的复选框选择特定行。 我在网上搜索了我没有得到任何解决这个问题的方法。 我在 SO 中进行了搜索,我得到的只是如何为 JTable 添加一列,该列使用二维数组而不是 SQL 数据库进行初始化。

我附上了用于创建JTable 的代码。我认为理解我的问题就足够了。

我已尝试手动添加一列。它确实添加了一列。但现在我的问题是我分配给每一行的复选框显示为javax.swing.JCheckBox,而不是列中的“复选框图标”。

public void init_table(JTable X)
{
try
{
    Class.forName(JDBC_DRIVER);
    con= DriverManager.getConnection("jdbc:mysql://localhost:3306/store",DB_USER, DB_PASS);
    query="SELECT * from Stalk";
    stmt = con.createStatement();
    rs = stmt.executeQuery(query);
    DefaultTableModel model= new DefaultTableModel();
    ResultSetMetaData meta = rs.getMetaData();
    int Columncount = meta.getColumnCount();
    for(int columnindex=1; columnindex<=Columncount; columnindex++)
    {
        model.addColumn(meta.getColumnLabel(columnindex));
    }
    Object[] row= new Object[Columncount];
    while(rs.next())
    {
    int i=0;
    for(i=0;i<Columncount;i++)
    {
        row[i]=rs.getObject(i+1);
    }

    model.addRow(row);
        }
    X.setModel(model);
        } 
    catch(Exception e)
    {
        e.printStackTrace();
    }

}

【问题讨论】:

  • 嗯,我的问题说明了我遇到的问题。每个解决方案都向我展示了使用 2D 数组设置我的表格模型。但正如我的代码所述,我没有使用二维数组来初始化列,而是使用 sql 数据库。我想知道一种允许我添加一列 jcheckbox 的方法。我不想知道如何在制作/创建 JTable 时设置一列 JCheckboxes。请帮忙!
  • 无论您的模型如何,您将复选框应用于列的方法都是相同的,因此您将继续被引导到以前的问题。该问题与您的模型无关,而与您对 api 的误解有关,因此不是纠正该问题的最佳场所。从教程开始,查看其他示例并根据您的问题调整解决方案
  • @MadProgrammer 是正确的;我已经在下面的完整示例中说明了基本要求。

标签: java sql swing jtable jcheckbox


【解决方案1】:

从这个完整的example 开始,下面的更改产生了所示的结果。注意:

  • SELECTED 列的getColumnClass() 的实现返回Boolean.classtype token,其中default renderer uses a check box;更多here

  • ResultSet 包含一个 Boolean 类型的新列。

  • city 有一个boolean 类型的新列,初始化为随机状态。

$ diff OldTest.java WorkerTest.java 
48a49
>         Boolean selected;
91a93,94
>                 case 2:
>                     return row.selected;
105a109,121
>         @Override
>         public Class<?> getColumnClass(int colIndex) {
>             switch (colIndex) {
>                 case 0:
>                     return Object.class;
>                 case 1:
>                     return String.class;
>                 case 2:
>                     return Boolean.class;
>             }
>             return null;
>         }
> 
114a131
>                         r.selected = rs.getBoolean(3);
138c155
<             st.execute("create table city(id integer, name varchar2)");
---
>             st.execute("create table city(id integer, name varchar2, selected boolean)");
140c157
<                 "insert into city values (?, ?)");
---
>                 "insert into city values (?, ?, ?)");
144a162
>                     ps.setBoolean(3, r.nextBoolean());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多