2014-01-16 35 views
0

我有这个表的模型,我插入值调用这种方式:AbstractTableModel上删除行不工作

lista.setModel(new SimpleTableModel(dados, colunas)); 

LISTA是JTable中

型号:

import java.awt.event.MouseEvent; 
import java.util.ArrayList; 

import javax.swing.JTable; 
import javax.swing.ListSelectionModel; 
import javax.swing.table.AbstractTableModel; 

public class SimpleTableModel extends AbstractTableModel{ 

    private ArrayList linhas = null; 
    private String [] colunas = null; 
    public String[] getColunas() {return colunas;} 
    public ArrayList getLinhas() {return linhas;} 
    public void setColunas(String[] strings) {colunas = strings;} 
    public void setLinhas(ArrayList list) {linhas = list;} 
    @Override 
    /** 
    * Retorna o numero de colunas no modelo 
    * @see javax.swing.table.TableModel#getColumnCount() 
    */ 
    public int getColumnCount() {return getColunas().length;} 

    /** 
    * Retorna o numero de linhas existentes no modelo 
    * @see javax.swing.table.TableModel#getRowCount() 
    */ 
    public String getColumnName(int col){ 
     return getColunas()[col]; 
    } 

    public int getRowCount() {return getLinhas().size();} 

    /** 
    * Obtem o valor na linha e coluna 
    * @see javax.swing.table.TableModel#getValueAt(int, int) 
    */ 
    public Object getValueAt(int rowIndex, int columnIndex) { 
     // Obtem a linha, que é uma String [] 

     String [] linha = (String [])getLinhas().get(rowIndex); 

     // Retorna o objeto que esta na coluna 
     return linha[columnIndex]; 
    } 
//added this to try... 
    public boolean deleteLine(int line){ 
     linhas.remove(line); 
     return true; 
    } 

    public boolean deleteAll(){ 
     linhas.clear(); 
     return true; 
    } 


public SimpleTableModel(ArrayList dados, String[] colunas){ 
    setLinhas(dados); 
    setColunas(colunas); 
} 

} 

但问题是,我CANT调用deleteLine()....

public boolean deleteLine(int line){ 
     linhas.remove(line); 
     return true; 
    } 

    public boolean deleteAll(){ 
     linhas.clear(); 
     return true; 
    } 

我不知道如何使这工作...因为我无法访问

我认为的错误是,构造是一个“填充”表,我想我必须改变它,并创建一个insertLine()..

,但不知道

回答

1

看看How to use tablesFiring Data Change Events也许将是deleteLine()是属于simpleTableModel的方法,但是您并未在框架上创建任何simpleTableModel的实例。你直接做

lista.setModel(new SimpleTableModel(dados, colunas)); 

尝试做在你的框架:

SimpleTableModel modelo = new SimpleTableModel(dados, colunas); 
lista.setModel(modelo); 
modelo.deleteX(line); 

而且你的模型是这样的内部:

public boolean deleteX(int line) throws DAOExcepcion{ //could be void because always returns true 
     this.removeRow(line); 
     this.fireTableRowsDeleted(line, line); 
     return true; 
    } 
+0

完善,解决了这个问题完美;) – user2582318

+0

快乐帮:) – carexcer

3

的问题是你没有发射任何类型的事件从模型会告诉该模型已经改变了表。

使用fireTableRowsDeleted尝试已经取下了模型

内从底层数据结构中的行后采取特别