我有一个DefaultTableModel,它填充了Object [] []数组。
现在我想添加一个带有checkBoxes的列并相应地执行操作。
当我将复选框添加到Object [] []数组并查看它时,我会显示文本
'javax.swing.JCheckBox [,0,0,0x0 ....',如何让它显示一个复选框并为其添加动作?
答案 0 :(得分:4)
JTable具有默认的复选框渲染器/编辑器,用于布尔值。只需让TableModel#getColumnClass
返回给定列的Boolean.class
。
答案 1 :(得分:2)
如何让它显示复选框
见Uhlen的回答
并向其添加操作?
使用TableModelListener。类似的东西:
public void tableChanged(TableModelEvent e)
{
if (e.getType() == TableModelEvent.UPDATE)
{
int row = e.getFirstRow();
int column = e.getColumn();
if (column == ?)
{
TableModel model = (TableModel)e.getSource();
Boolean value = (Boolean)model.getValueAt(row, column));
if (value.booleanValue())
// add your code here
}
}
}
答案 2 :(得分:2)
您也可以获取该类,而不是对每种返回类型进行硬编码。以下是覆盖方法的示例:
//create the table
DefaultTableModel tableModel = new DefaultTableModel(data, columnNames)
//override the method
{
public Class<?> getColumnClass(int colIndex) {
return getValueAt(0, colIndex).getClass();
}
然后,当您创建表时,您可以通过以下方式初始化它:
data[i][12] = new Boolean(false);
使框看起来没有了:)
答案 3 :(得分:0)
答案 4 :(得分:0)
不,你不能提供swing组件作为模型对象[]数组。这应该在列上注册为单元格编辑器。
默认情况下,DefaultTableModel支持复选框作为存储布尔类类型值的列的编辑器。
因此,在数组中传递Boolean.TRUE / Boolean.FALSE对象并将表设置为可编辑。然后表会自动为您呈现复选框。
您是否需要为每个班级类型注册编辑器