我已經在這個網站上閱讀過很多關於這個問題的問題,我找不到爲什麼它仍然無法正常工作。複選框無法被選中 - 它們是可編輯的! 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 *的數據必須是布爾型的。 –