这个问题在这里已有答案:
我从存储在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();
}
}
从这个完整的example开始,下面的变化产生了所示的结果。注意:
getColumnClass()
列的SELECTED
的实现返回type token的Boolean.class
,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());