我已经在这个网站上阅读过很多关于这个问题的问题,我找不到为什么它仍然无法正常工作。复选框无法被选中 - 它们是可编辑的! Java Swing
问题:
我由JTable
被一个JScrollPane
内显示。该JTable
构造如下:
table = new JTable(new DataTableModel());
正如你所看到的,我使用了一个名为DataTableModel
定制AbstractDataModel
。现在,当我显示此时,出现复选框,但无法将其选中。它们是可编辑的,如下所示。以下是DataTableModel
类中的相关代码:(请注意,我的复选框列是第一列,位于索引0处,并且我的数据在此列中的数据为“null”)。对于一些
public class DataTableModel extends AbstractTableModel
{
private String[][] data;
private String[] header =
{ "", "KB Name", "fpGUID" };
public DataTableModel() throws SQLException
{
// ========= CONNECTS TO DB AND PULLS RESULTS ==========
// GETS RESULTS SET CALLED "rs"
// populate data array
int counter = 0;
while (rs.next())
{
//data[counter][0] = "sfsdfsdfs ";
data[counter][1] = (String) rs.getObject(2);
data[counter][2] = (String) rs.getObject(4);
counter++;
}
// =====================================================
}
@Override
public String getValueAt(int rowIndex, int columnIndex)
{
return data[rowIndex][columnIndex];
}
public boolean isCellEditable(int row, int col)
{
return col == 0;
}
public Class getColumnClass(int column)
{
if (column == 0)
{
return Boolean.class;
} else
{
return String.class;
}
}
所以,看来我的getColumnClass()
方法很好,所以有什么问题?它可能是我的“数据”,我存储表中的数据的东西。下面是数据数组:
这看起来不正确的:'字符串getValueAt(...)'。这应该返回一个Object,而不是一个String,特别是如果columnIndex是0,它应该返回一个'Boolean'来与你的'getColumnClass'一致并且需要显示一个可编辑的JCheckBox。 –
哦,它应该返回一个Object?我试图将数据数组的第0列设置为false,但我得到一个错误,因为我的数据数组是String类型的。我应该使数据类型,如果数据数组为对象(我想我已经尝试过,但得到一个错误..)。 –
您需要查看[TableModel]的API(http://docs.oracle.com/javase/7/docs/api/javax/swing/table/TableModel.html)。 getValueAt(...)'方法的签名是什么?该API会告诉你。至于你的错误,好吧,你需要修正它们,但我100%肯定列0 *的数据必须是布尔型的。 –