Java 将复选框添加到DefaultTableModel
我有一个DefaultTableModel,其中填充了一个对象[][]数组 现在我想添加一个带有复选框的列,并相应地执行操作 当我将复选框添加到对象[][]数组并查看它时,会显示文本Java 将复选框添加到DefaultTableModel,java,swing,checkbox,Java,Swing,Checkbox,我有一个DefaultTableModel,其中填充了一个对象[][]数组 现在我想添加一个带有复选框的列,并相应地执行操作 当我将复选框添加到对象[][]数组并查看它时,会显示文本 “javax.swing.JCheckBox[,0,0,0x0…”,如何使其显示复选框并向其添加操作?您可以使用自定义表格单元格呈现程序 看这里 JTable具有布尔值的默认复选框呈现器/编辑器。只需使您的TableModel#getColumnClass返回给定列的boolean.class。否您不能将swing
“javax.swing.JCheckBox[,0,0,0x0…”,如何使其显示复选框并向其添加操作?您可以使用自定义表格单元格呈现程序 看这里
JTable具有布尔值的默认复选框呈现器/编辑器。只需使您的
TableModel#getColumnClass
返回给定列的boolean.class
。否您不能将swing组件作为模型对象[]数组提供。这应该注册为列上的单元格编辑器
无论如何,默认情况下,DefaultTableModel支持复选框作为存储布尔类类型值的列的编辑器
所以,在数组中传递Boolean.TRUE/Boolean.FALSE对象,并将表格设置为可编辑。然后表格自动为您呈现复选框
是否需要为每个类类型注册编辑器
如何使其显示复选框
见乌伦的回答
并为其添加操作
使用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
}
}
}
您也可以只获取类,而不是对每个返回类型进行硬编码。下面是override方法的示例:
//create the table
DefaultTableModel tableModel = new DefaultTableModel(data, columnNames)
//override the method
{
public Class<?> getColumnClass(int colIndex) {
return getValueAt(0, colIndex).getClass();
}
这使得该框看起来没有勾选:)很可能是因为您尚未实现TableModel#getColumnClass,请参见我的答案:)如何将TableModelEvent添加到TableModel?@Teysz,
table.getModel.addTableModelListener(…);
data[i][12] = new Boolean(false);