Java JTable创建一行复选框以创建子表

Java JTable创建一行复选框以创建子表,java,swing,jtable,jcheckbox,abstracttablemodel,Java,Swing,Jtable,Jcheckbox,Abstracttablemodel,我有一个JTable,它使用AbstractTableModel。我试图使表的第一行成为一行jcheckbox 编辑:目标是选中复选框的列并创建一个新表。这是我第一次尝试这样的东西,所以我愿意接受建议 以下是我在NetBeans 7.1.1中尝试的代码: private void selectSourceCBActionPerformed(java.awt.event.ActionEvent evt) {

我有一个
JTable
,它使用
AbstractTableModel
。我试图使表的第一行成为一行
jcheckbox

编辑:目标是选中复选框的列并创建一个新表。这是我第一次尝试这样的东西,所以我愿意接受建议

以下是我在NetBeans 7.1.1中尝试的代码:

private void selectSourceCBActionPerformed(java.awt.event.ActionEvent evt) {                                           
        int sourceNum = selectSourceCB.getSelectedIndex();

        DataSource currentDS = datSourceArrList.get(sourceNum);
        final ArrayList<Object[]> workArrLst1 = currentDS.getSampSet();

        sourceDetailTable.setAutoResizeMode(sourceDetailTable.AUTO_RESIZE_OFF);
        sourceDetailTable.setColumnSelectionAllowed(true);
        JTableHeader header = sourceDetailTable.getTableHeader();

        AbstractTableModel mytable1 = new AbstractTableModel() {
        Object colNames[] = workArrLst1.get(0);

            @Override
            public int getRowCount() {
                return workArrLst1.size();
            }

            @Override
            public int getColumnCount() {
                return workArrLst1.get(1).length;
            }

            @Override
            public Object getValueAt(int rowIndex, int columnIndex) {
                return workArrLst1.get(rowIndex+1)[columnIndex];
             }

            @Override
            public void setValueAt(Object value, int row, int col) {
                if(row == 1){
                        workArrLst1.get(row)[col] = Boolean(false);
                        fireTableCellUpdated(row, col);
                }
            workArrLst1.get(row)[col] = (String) value;
            fireTableCellUpdated(row, col);
            }

            @Override
            public String getColumnName(int column) {
                return (String) colNames[column];
            }

        };    

    } 
private void选择sourcecbactionperformed(java.awt.event.ActionEvent evt){
int sourceNum=selectSourceCB.getSelectedIndex();
DataSource currentDS=datSourceArrList.get(sourceNum);
final ArrayList workArrLst1=currentDS.getSampSet();
sourceDetailTable.setAutoResizeMode(sourceDetailTable.AUTO_RESIZE_OFF);
sourceDetailTable.setColumnSelectionAllowed(true);
JTableHeader=sourceDetailTable.getTableHeader();
AbstractTableModel mytable1=新的AbstractTableModel(){
对象colNames[]=workArrLst1.get(0);
@凌驾
public int getRowCount(){
返回workArrLst1.size();
}
@凌驾
public int getColumnCount(){
返回workArrLst1.get(1.length);
}
@凌驾
公共对象getValueAt(int行索引、int列索引){
返回workArrLst1.get(rowIndex+1)[columnIndex];
}
@凌驾
public void setValueAt(对象值、整行、整列){
如果(行==1){
workArrLst1.get(row)[col]=布尔值(false);
FireTableCell更新(行、列);
}
workArrLst1.get(行)[col]=(字符串)值;
FireTableCell更新(行、列);
}
@凌驾
公共字符串getColumnName(int列){
返回(字符串)colNames[列];
}
};    
} 

这里有什么明显的遗漏吗?

通常我们会将一列设置为复选框,这通常是通过重写
getColumnClass(…)
来完成的。你的目标是什么?是否改为在表格标题中使用复选框?您在哪里返回第一行的布尔数据?@hovercraftfullofels:目标是选中复选框的列并创建一个新表。这是我第一次尝试这样的事情,所以我愿意接受建议。考虑把控制放在JTALE的列标题中,尽管这也不太好。看看这个SO线程:在几个月前的一个项目中,我使用了来自的代码。我不知道这可能对你也有帮助。你可以用。