Problema com inicialização de array em tabela

3 respostas
DAREK6920

Será que alguem pode me ajudar ? Não sei porque este erro esta acontecendo !

public static void crett(String Seletor) throws ClassNotFoundException, SQLException{
                  String[][] dados = new String [][]{{"","","","","","",""}};  
                  String[] colunas = new String []{"NUMERO,CODIGO,QTE,UN,TOTAL,FRETE,DESCONTO"};  
                  DefaultTableModel modelo2 = new DefaultTableModel(dados,colunas);  
                  
                  ResultSet rs = funcoes.rsf(Seletor,"nfe");
                  while (rs.next()) {  
                  String XNUMERO = rs.getString("NUMERO");    
                  String XCODIGO = rs.getString("CODIGOPRODUTO"); 
                  String XQTE = rs.getString("QUANTIDADE"); 
                  String XUN = rs.getString("UNITARIO"); 
                  String XTOTAL = rs.getString("TOTAL");
                  String XFRETE = rs.getString("FRETE");
                  String XDESCONTO = rs.getString("DESCONTO");
                  
                  Vector vetor2 = new Vector();    
                  vetor2.addElement(XNUMERO);
                  vetor2.addElement(XCODIGO);
                  vetor2.addElement(XQTE);
                  vetor2.addElement(XUN);
                  vetor2.addElement(XTOTAL);
                  vetor2.addElement(XFRETE);
                  vetor2.addElement(XDESCONTO);
                  
                  modelo2.addRow(vetor2);  
         }  
                  
                  JTable jtable = new JTable( modelo2 ); 
                  TABELA.setModel(modelo2);
                  TABELA.getColumnModel().getColumn(0).setPreferredWidth(5);
                  TABELA.getColumnModel().getColumn(1).setPreferredWidth(5);
                  TABELA.getColumnModel().getColumn(2).setPreferredWidth(45);
                  TABELA.getColumnModel().getColumn(3).setPreferredWidth(35);
                  TABELA.getColumnModel().getColumn(4).setPreferredWidth(55);
                  TABELA.getColumnModel().getColumn(5).setPreferredWidth(55);
                  TABELA.getColumnModel().getColumn(6).setPreferredWidth(55);
                  
                  
                  
                  DefaultTableCellRenderer esquerda = new DefaultTableCellRenderer();  
                  DefaultTableCellRenderer centralizado = new DefaultTableCellRenderer();  
                  DefaultTableCellRenderer direita = new DefaultTableCellRenderer();  
                  
                  esquerda.setHorizontalAlignment(SwingConstants.LEFT);  
                  centralizado.setHorizontalAlignment(SwingConstants.CENTER);  
                  direita.setHorizontalAlignment(SwingConstants.RIGHT);  
                  
                  TABELA.getColumnModel().getColumn(0).setCellRenderer(esquerda);  
                  TABELA.getColumnModel().getColumn(1).setCellRenderer(esquerda);  
                  TABELA.getColumnModel().getColumn(2).setCellRenderer(direita);  
                  TABELA.getColumnModel().getColumn(3).setCellRenderer(direita);  
                  TABELA.getColumnModel().getColumn(4).setCellRenderer(direita);  
                  TABELA.getColumnModel().getColumn(5).setCellRenderer(direita);  
                  TABELA.getColumnModel().getColumn(6).setCellRenderer(direita);  
                  
                  
    }

A mensagem de erro gerada é a seguinte :

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
	at java.util.Vector.elementAt(Vector.java:427)
	at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
	at nfeasy.itens.crett(itens.java:386)
	at nfeasy.itens.<init>(itens.java:39)
	at nfeasy.notas.GRADEMouseClicked(notas.java:279)
	at nfeasy.notas.access$000(notas.java:31)
	at nfeasy.notas$1.mouseClicked(notas.java:150)
	at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
	at java.awt.Component.processMouseEvent(Component.java:6291)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6053)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4651)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:616)
	at java.awt.EventQueue$2.run(EventQueue.java:614)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Agradeço desde já qualquer ajuda

3 Respostas

andre_bento

Olá amigo.
Cara, tente fugir do DefaultTableModel o máximo que vc puder…
Construa vc mesmo sua Table…

Como diz o amigo ViniGodoy: http://www.guj.com.br/java/149861-recuperar-id-de-jtable/2#813171

Não use DefaultTableModel!!!

Motivos:

  1. É mais difícil que escrever seu próprio TableModel;
  2. É mais lento (usa classes sincronizadas);
  3. Ocupa mais espaço em memória (duplica seus dados);
  4. Deixa o código mais confuso e difícil de manter;
  5. Usa casts inseguros;
  6. Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;
  7. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.

Veja também esse link que o amigo d34d_d3v1l fez:
http://www.guj.com.br/java/231928-morte-definitiva-ao-default-table-model

Essa TABELA vem de onde cara? Porque a variável que vc criou se chama jtable.
E outra… saia do Vector também cara, é mais lento e tem uma série de desvantagens para o List como listas sincronizadas
http://www.guj.com.br/java/110997-list-x-vector

Abraços

igor_ks

java.lang.ArrayIndexOutOfBoundsException:

estouro de tamanho do array

DAREK6920

A variavel jTable serve apenas para criar o modelo. Note que em seguida eu faço a alocação do modelo na tabela real que se chama TABELA.

O problema é que esta funcão funciona nomalmente em outra rotina para geração de tabelas, apenas sendo diferente o numero de colunas.

Gostaria de saber exatamente porque esta dando estouro de array

Se alguem puder me dizer agradeço.

Não vou usar o outro metodo porque sinceramente achei este mais facil. Mas prometo que vou estuda-lo no futuro.

Grato

Criado 10 de novembro de 2011
Ultima resposta 10 de nov. de 2011
Respostas 3
Participantes 3