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;