[Duvida] - Recuperar valor da celula TableModel (Resolvido)

Boa Tarde;

Eu não estou conseguindo recuperar o valor da minha linha em uma JTable;

Esse programa é maior, mas essa parte que estou com problemas, eu crio uma Tabela, procuro por campos em branco e crio uma outra tabela para mostrar as linhas que estão em branco;

Antes eu fazia criando a JTable passando uma String para ela;

Agora estou utilizando implementando o TableModel;

[code]package principal;

public class valorErroBO {

private String linha;
private String codCliente;
private String coluna;

public valorErroBO (String linha, String codCliente, String coluna){
	this.linha=linha;
	this.codCliente=codCliente;
	this.coluna=coluna;
}

//Linha
public String getLinha() {
	return linha;
}
public void setLinha(String linha) {
	this.linha = linha;
}

//Cliente
public String getCodCliente() {
	return codCliente;
}
public void setCodCliente(String codCliente) {
	this.codCliente = codCliente;
}

//Coluna
public String getColuna() {
	return coluna;
}
public void setColuna(String coluna) {
	this.coluna = coluna;
}

}[/code]

[code]package principal;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

public class tabelaErroBO extends AbstractTableModel {

/**
 * 
 */
private static final long serialVersionUID = 1612067480246207772L;


//Cria colunas
private static final int COL_LINHA = 0;  
private static final int COL_CODCLIENTE = 1;
private static final int COL_CAMPO = 2;

private List<valorErroBO> valores;
public static int linhasDaTabelaERRO = 0;


//recebe a lista de informações dos erros do BO  
public tabelaErroBO() {  
      this.valores = new ArrayList<valorErroBO>();  
}

public tabelaErroBO(List<valorErroBO> lista) {
    this();
    valores.addAll(lista);
}

//retorna valor da qtdd de colunas
@Override
public int getColumnCount() {
	// TODO Auto-generated method stub
	return 3;
}

//retorna valor da qtdd de linha
@Override
public int getRowCount() {
	// TODO Auto-generated method stub
	return valores.size();
}

//retorna nome das colunas
public String getColumnName(int column) {    
	if (column == COL_LINHA)return "<html><center>Numero da <br/> Linha </center></html>";  
	if (column == COL_CODCLIENTE) return "<html><center>Código do <br/>cliente</center></html>";
	if (column == COL_CAMPO) return "<html><center>Campo</center></html>";
	return "";
    }

//retorna a classe que representa a coluna
@Override
public Class<String> getColumnClass(int columnIndex) {
    if (columnIndex == COL_LINHA) return String.class;
    else if (columnIndex == COL_CODCLIENTE) return String.class;
    if (columnIndex == COL_CAMPO) return String.class;
    return String.class;
}


@Override
public Object getValueAt(int row, int column) {
	
	//Retorna o valor da coluna column e da linha row.  
    valorErroBO valorLinha = valores.get(row);  
    if (column == COL_LINHA) return valorLinha.getLinha();
    else if (column == COL_CODCLIENTE) return valorLinha.getCodCliente();
    else if (column == COL_CAMPO) return valorLinha.getColuna();
    return "";  
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    //pega o produto da linha
    valorErroBO p = valores.get(rowIndex);

    //verifica qual valor vai ser alterado
    if (columnIndex == COL_LINHA) p.setLinha(aValue.toString());
    else if (columnIndex == COL_CODCLIENTE) p.setCodCliente(aValue.toString());
    else if (columnIndex == COL_CAMPO) p.setColuna(aValue.toString());
       
}


//Bloqueia edição de celulas
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
}

}[/code]

Como podem ver, ao dar um clique duplo, eu quero recuperar o valor dessa celular, porém, ele nem imprime aquele “oi” que eu mando imprimir;

[code]package principal;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;

public class JanelaErroBO extends JFrame implements MouseListener {

/**
 * 
 */
private static final long serialVersionUID = 3193486845532888073L;

static JTable tabErroBO;
private JScrollPane scrollErroBO;
static tabelaErroBO modelErro;
public static String nomeColuna[];
JMenuItem itemExcel;


public JanelaErroBO (int[] linhaEmBranco, int[] clienteEmBranco, int[] colunaEmBranco){

int[] valorColunaEmBranco = colunaEmBranco;

//Define layout para janela
setLayout(new BorderLayout());

//Pega tamanho da resolução para criar a janela
Toolkit tk = Toolkit.getDefaultToolkit();  
Dimension d = tk.getScreenSize();
setSize(299,d.height/2);

//Onde estará localizada na tela
setLocation(0, 0);

//Titulo
setTitle("Lista Erro BO"); 
setResizable(false);

JMenuBar barraPrincipalErroBO = new JMenuBar();
JMenu menuExportar = new JMenu("Exportar Erros"); //Cria o Menu, as opções que terão no MenuBar

itemExcel = new JMenuItem("Para Excel"); //Cria item BO do Menu
itemExcel.addMouseListener(this); //Adiciona um evento de mouse para ele
menuExportar.add(itemExcel);//Adiciona esse item ao Menu

barraPrincipalErroBO.add(menuExportar);//Adiciona o Menu ao MenuBar

setJMenuBar(barraPrincipalErroBO); //Adiciona o MenuBar a Janela principal

nomeColuna = new String[800];

//Verifica a coluna e adiciona o nome correto
for (int b=0; linhaEmBranco[b]>0 ; b++){
     	   if (valorColunaEmBranco[b]==1) nomeColuna[b]="Situação do Documento \n";
      else if (valorColunaEmBranco[b]==2) nomeColuna[b]="Número do Banco \n";
      else if (valorColunaEmBranco[b]==3) nomeColuna[b]="Nosso Número \n";
      else if (valorColunaEmBranco[b]==4) nomeColuna[b]="Data de vencimento do boleto \n";
      else if (valorColunaEmBranco[b]==5) nomeColuna[b]="Número da nota fiscal \n";
      else if (valorColunaEmBranco[b]==6) nomeColuna[b]="Data da baixa do boleto \n";
      else if (valorColunaEmBranco[b]==7) nomeColuna[b]="Valor total recebido do boleto \n";
      else if (valorColunaEmBranco[b]==8) nomeColuna[b]="Valor do encargo de cobrança \n";
      else if (valorColunaEmBranco[b]==9) nomeColuna[b]="Valor recebido de juros \n";
     else if (valorColunaEmBranco[b]==10) nomeColuna[b]="Valor recebido de multa \n";
     else if (valorColunaEmBranco[b]==11) nomeColuna[b]="Valor concedido de desconto \n";
     else if (valorColunaEmBranco[b]==12) nomeColuna[b]="Planta \n";
     else if (valorColunaEmBranco[b]==13) nomeColuna[b]="Código do Cliente \n";

}

//Adiciona valores as linhas e colunas
List<valorErroBO> lista = new ArrayList<valorErroBO>();
for (int a=0; linhaEmBranco[a]>0 ; a++)
{
		lista.add(new valorErroBO(String.valueOf(linhaEmBranco[a]), String.valueOf(clienteEmBranco[a]),
				nomeColuna[a]));
}	

//cria o modelo de Erro
modelErro = new tabelaErroBO(lista);

tabErroBO = new JTable();

//atribui o modelo à tabela
tabErroBO.setModel(modelErro);

tabErroBO.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tabErroBO.getTableHeader().setReorderingAllowed(false);
tabErroBO.setSize(500,300);
tabErroBO.setLocation(10, 10);
//Define largura da coluna e bloqueia edição
tabErroBO.getColumnModel().getColumn(0).setPreferredWidth(80);  
tabErroBO.getColumnModel().getColumn(0).setResizable(false);
tabErroBO.getColumnModel().getColumn(1).setPreferredWidth(83);  
tabErroBO.getColumnModel().getColumn(1).setResizable(false);
tabErroBO.getColumnModel().getColumn(2).setPreferredWidth(110);  
tabErroBO.getColumnModel().getColumn(2).setResizable(false);

//Adiciona um scroll a tabela, sempre o scrool fica como janela principal, por isso sempre o scrool é adicionado
//a janela e não a tabela
	
scrollErroBO = new JScrollPane(tabErroBO, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,   
			ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollErroBO.setSize(500,300);
scrollErroBO.setLocation(10, 10);
	
//adiciona scroll a janela, por consequencia, a tabela
add(scrollErroBO, BorderLayout.CENTER);

setVisible(true);

}


@Override
public void mouseClicked(MouseEvent e) {
	// TODO Auto-generated method stub
	 if (e.getClickCount() == 2)  
        {  
		 
		 	System.out.println("oi");  
		 	System.out.println(tabErroBO.getValueAt(tabErroBO.getSelectedRow(), 0));
		 	
        }
}


@Override
public void mouseEntered(MouseEvent e) {
	// TODO Auto-generated method stub
	
}

@Override
public void mouseExited(MouseEvent e) {
	// TODO Auto-generated method stub
	
}

@Override
public void mousePressed(MouseEvent e) {
	// TODO Auto-generated method stub
	
}

@Override
public void mouseReleased(MouseEvent e) {
	// TODO Auto-generated method stub
	if (e.getSource().equals(itemExcel)){
		try {
			JanelaBO.ExportarExcel();
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
}

}[/code]

Estou construindo de modo errado?

Eu comecei agora a utilizar o TableModel, então alguma coisa não entendi muito bem;

Eu quero pegar o numero da linha que o usuário clica e dar “foco” na tabela principal;

Se alguem puder ajudar, agradeço;

cara o jframe nao deve implementar o mouse listener…
o mouse listener voce deve por na sua tabela, da seguinte forma(na verdade voce nem usa MouseListener, é melhor usar o MouseAdapter):

[code]
minhaJTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2){

                        }
                    }
                });[/code]

[quote=mateusviccari]cara o jframe nao deve implementar o mouse listener…
o mouse listener voce deve por na sua tabela, da seguinte forma(na verdade voce nem usa MouseListener, é melhor usar o MouseAdapter):

[code]
minhaJTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2){

                        }
                    }
                });[/code][/quote]

Obrigado mateusviccari, eu fiz o teste e funcionou;

pq o JFrame não deve implementar o mouse listener?

Se eu não implementar, como faço a questão de Menus da janela?

O mouseListener, assim como a maioria dos listeners dos componentes swing, voce adiciona somente nos componentes que vao exercer uma determinada funçao executada por aquele listener.

o que voce quer dizer com menus da janela? pois se for os menus que voce adiciona no JMenuBar, voce nao usa o mouselistener pra disparar eventos, voce usa o ActionListener:

menuItemSetores.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { System.out.println("Cliquei no menu...."); } });

[quote=mateusviccari]O mouseListener, assim como a maioria dos listeners dos componentes swing, voce adiciona somente nos componentes que vao exercer uma determinada funçao executada por aquele listener.

o que voce quer dizer com menus da janela? pois se for os menus que voce adiciona no JMenuBar, voce nao usa o mouselistener pra disparar eventos, voce usa o ActionListener:

menuItemSetores.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { System.out.println("Cliquei no menu...."); } });[/quote]

Hum…

Obrigado pela dica, farei uma pesquisa e vou analisar qual o melhor método;

Obrigado novamente;