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线程:在几个月前的一个项目中,我使用了来自的代码。我不知道这可能对你也有帮助。你可以用。