如何通过SQL将JCheckBox的列添加到JTable?

时间:2019-04-22 05:15:17

标签: java sql swing jtable jcheckbox

我已经根据存储在SQL数据库中的数据创建了JTable。基本上,我的列数固定在JTable中。现在,我想添加一列,该列将允许用户使用特定行的复选框来选择特定行。 我在网上搜索,但没有针对此问题的任何解决方案。 我在SO中进行搜索,而我所得到的就是如何添加使用2D数组(而不是SQL数据库)初始化的JTable的列。

我已附加了用于创建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();
    }

}

1 个答案:

答案 0 :(得分:1)

从此完整的example开始,以下更改将产生说明的结果。注意:

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

  • ResultSet包含类型为Boolean的新列。

  • city的类型为boolean的新列已初始化为随机状态。

image

$ 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());