Ank*_*tel 3 java swing jtable defaulttablemodel
JTable我的问题与和相关DefaultTableModel。我的任务是创建JTable一个显示带有复选框的数据...我成功地完成了..但是我想删除由JTable复选框选择的行...我知道这已经被问了太多次...而且我需要使用removeRow(int row)方法用于删除...但是当我执行该语句时
DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
int totalrows=model.getRowCount();
for (int i = totalrows - 1 ; i >= 0; i--)
{
Boolean checked = (Boolean) jTable1.getModel().getValueAt(i, 8);
if (checked)
{
((DefaultTableModel)jTable1.getModel()).removeRow(i);
}
}
Run Code Online (Sandbox Code Playgroud)
它总是从getRowCount()方法返回 0,因此它不会进入循环。表已经有行。
我的TableModel班级如下
public class tabmod extends DefaultTableModel
{
public tabmod(Object rowData[][], Object columnNames[]) {
super(rowData, columnNames);
}
@Override
public Class getColumnClass(int col) {
if (col == 8)
return Boolean.class;
return super.getColumnClass(col); //other columns accept String values
}
@Override
public boolean isCellEditable(int row, int col) {
return col == 8;
}
}
Run Code Online (Sandbox Code Playgroud)
JFrame我是这样称呼它的
tabmod tab=new tabmod(t,header);
final JTable table = new JTable(tab);
table.setFillsViewportHeight(true);
jScrollPane1.add(table);
jScrollPane1.setViewportView(table);
Run Code Online (Sandbox Code Playgroud)
我不明白这里有什么问题......
如果您说行数为零,但表在可见 GUI 上显示了行,则意味着您的代码未引用可见表,这意味着您可能为表创建了实例变量和局部变量。
final JTable table = new JTable(tab);
Run Code Online (Sandbox Code Playgroud)
上面的行可能是错误的。您不应该使用最终变量。相反,您应该使用实例变量。所以代码应该是:
table = new JTable(tab);
Run Code Online (Sandbox Code Playgroud)
现在您的deleteRows() 方法可以引用实例变量。
//jScrollPane1.add(table);
jScrollPane1.setViewportView(table);
Run Code Online (Sandbox Code Playgroud)
您永远不应该将组件添加到滚动窗格。您只添加第二行正确执行的组件。摆脱第一行。