Trabalhando com JTable

Por acaso alguem aqui utiliza o Mantisse para desenvolvimento de aplicações desktop ?
Eu estou desenvolvendo um pequeno sistema com ele e estou com algumas dúvidas em relação ao JTable.

1º) Para preencher com valores, depois de muito apanhar, eu fiz da seguinte forma :

Vector listagem = null; DefaultTableModel tableModel = (DefaultTableModel)listagemLaudos.getModel(); for(ArquivoLaudoDetalhe detalhe : listaDetalhes) { listagem = new Vector(); listagem.add(detalhe.getCdSeqRegis()); listagem.add(detalhe.getCdLvpre()); listagem.add(detalhe.getDtVspre()); listagem.add(detalhe.getHrVspre()); tableModel.addRow(listagem); }

Eu dou um getModel(); porque o Netbeans já cria um DefaultTableModel automático. Porem dando uma pesquisada, vi que para preencher a tabela tem uma forma mais fácil, na qual você passa um array de String [][] ou um Vector direto, sem ter que chamar o método addRow() toda vez mas não sei como fazer isso.

2º) Essa não tem haver com o Mantisse, maseu adicionei um evento mouseClicked para pegar o número da linha em que estou clicando, mas não sei como fazer isso.

Alguem pode me ajudar ?

Prezado,

Aqui tem os exemplos que voce vai precisar:

http://www.exampledepot.com/egs/javax.swing.table/pkg.html

Tudo sobre JTable.

Boa kuesley, valeu pela dica. Porem o site me mostra como pegar o indice da linha que eu estou clicando. Se souber me passa ai. Valei.

mas se vc em a linha (indice) vai no teu model e traz o objeto que te interessa.

dica: nao crie o JTable usando a ferramenta grafica do netbeans. Assim perde muito a flexibilidade.
faça somente a instancia do JScroller

entao faça assim:

[code]String cols[] = new String[2]; //arrays de colunas
cols[0] = “col 1”;
cols[1] = “col 2”;
String dados[][] = new String[2][2]; //dados
dados[0][0] = “dado 0 0”;
dados[0][1] = “dado 0 1”;
dados[1][0] = “dado 1 0”;
dados[1][1] = “dado 1 1”;

JTable tabela = new JTable(dados, cols);
scroll.setViewportView(tabela);[/code]

Vixe, num entendi nada. Mas resumido eu so quero quando eu clicar na linha pegar o valor da primeira coluna, para passa como parâmetro para um pesquisa.
Eu sei como pegar o valor, mas tenho que saber o indice da linha em que estou clicando, para passa para o método.

Olá amigo

coloque este código na rotina principal:

private void jButtonPesquisaClienteActionPerformed(java.awt.event.ActionEvent evt) {

  Consultacliente.setNome(tfNomeCliente.getText());
  Consultacliente consultaCliente = new Consultacliente(null);
  consultaCliente.setModal(true);
  consultaCliente.setVisible(true);

  id_cliente  = consultaCliente.getCodigo();
  try {
       if (!id_cliente.equals(null)) {
          selecionaCliente();
       }
       else {
         tfIdCliente.requestFocus();
      }
  } catch (Exception ex) {
      Logger.getLogger(FrameOrdemServicoOld.class.getName()).log(Level.SEVERE, null, ex);
  }
}

e este na rotina para que seleciona na sua jtable:

           jTable.addMouseListener(new MouseAdapter(){  
                @Override
           public void mouseClicked(MouseEvent e){  
              if (e.getClickCount() == 2){  
                 // Listaclientes.id  = jTable.getModel().getValueAt(jTable.getSelectedRow(),0);
                    Codigo = jTable.getModel().getValueAt(jTable.getSelectedRow(),0);
                    dispose();
              }  
           }
           });

Silvio Guedes

[quote=silviogs]Olá amigo

coloque este código na rotina principal:

private void jButtonPesquisaClienteActionPerformed(java.awt.event.ActionEvent evt) {

  Consultacliente.setNome(tfNomeCliente.getText());
  Consultacliente consultaCliente = new Consultacliente(null);
  consultaCliente.setModal(true);
  consultaCliente.setVisible(true);

  id_cliente  = consultaCliente.getCodigo();
  try {
       if (!id_cliente.equals(null)) {
          selecionaCliente();
       }
       else {
         tfIdCliente.requestFocus();
      }
  } catch (Exception ex) {
      Logger.getLogger(FrameOrdemServicoOld.class.getName()).log(Level.SEVERE, null, ex);
  }
}

e este na rotina para que seleciona na sua jtable:

           jTable.addMouseListener(new MouseAdapter(){  
                @Override
           public void mouseClicked(MouseEvent e){  
              if (e.getClickCount() == 2){  
                 // Listaclientes.id  = jTable.getModel().getValueAt(jTable.getSelectedRow(),0);
                    Codigo = jTable.getModel().getValueAt(jTable.getSelectedRow(),0);
                    dispose();
              }  
           }
           });

Silvio Guedes[/quote]

Aiiiiiiiiiii meu Deeeeeeeeeeeeus !!!
Salve Silvio Guedes, agora sim! Eu só precisava desse código, nem precisava do resto.

Por onde vc estava esses dias. Nem sei como te agradecer. Valeu mesmo. rs !

[quote=Marlon Meneses]dica: nao crie o JTable usando a ferramenta grafica do netbeans. Assim perde muito a flexibilidade.
faça somente a instancia do JScroller

entao faça assim:

[code]String cols[] = new String[2]; //arrays de colunas
cols[0] = “col 1”;
cols[1] = “col 2”;
String dados[][] = new String[2][2]; //dados
dados[0][0] = “dado 0 0”;
dados[0][1] = “dado 0 1”;
dados[1][0] = “dado 1 0”;
dados[1][1] = “dado 1 1”;

JTable tabela = new JTable(dados, cols);
scroll.setViewportView(tabela);[/code]
[/quote]

Dica 2: não crie seu JTable assim.
Implemente um TableModel com as funcionalidades que voce quer. Voce vai ver que o resultado vai ficar bem mais simples depois.

[quote=Mark_Ameba][quote=Marlon Meneses]dica: nao crie o JTable usando a ferramenta grafica do netbeans. Assim perde muito a flexibilidade.
faça somente a instancia do JScroller

entao faça assim:

[code]String cols[] = new String[2]; //arrays de colunas
cols[0] = “col 1”;
cols[1] = “col 2”;
String dados[][] = new String[2][2]; //dados
dados[0][0] = “dado 0 0”;
dados[0][1] = “dado 0 1”;
dados[1][0] = “dado 1 0”;
dados[1][1] = “dado 1 1”;

JTable tabela = new JTable(dados, cols);
scroll.setViewportView(tabela);[/code]
[/quote]

Dica 2: não crie seu JTable assim.
Implemente um TableModel com as funcionalidades que voce quer. Voce vai ver que o resultado vai ficar bem mais simples depois.[/quote]

obviamente esse arrays podem ser feitos de forma dinamica! só coloquei assim pra exemplificar!

[quote=Marlon Meneses]dica: nao crie o JTable usando a ferramenta grafica do netbeans. Assim perde muito a flexibilidade.
Implemente um TableModel com as funcionalidades que voce quer. Voce vai ver que o resultado vai ficar bem mais simples depois.[/quote]

Olá Marlon, tudo bem ?
Então eu não conheço nada de Swing, por isso uso o Mantisse para posicionar os componetes na tela, fica mais fácil e rápido. Porem no Mantisse pelo que vi ele deixa vc posicionar a tabela onde você quer e depois customizar. Se você tiver um exemplo simples para isso eu agradeceria.

Abraços e obrigado.

Mark,

Seja mais extensivo em sua explicação.
Você vai ver, é osso.
Eu nunca programei swing, mas agora sou o único membro da minha “equipe” e comecei pelo Matisse.

http://www.guj.com.br/posts/list/15/199067.java#1001295

Ja explicamos isso varias vezes no forum.

Ok Mark,

Vô me debruçar.

[DEBRUÇADO]

[edit em 24/03/2010 às 00:34]
Mark,
Legal as leituras.
Falta ainda ler a sua implementação do TableModel.

Pelo que entendi, para cada Entity que eu queira listar, devo fazer um TableModel.
Ainda nas leituras, também pude entender que seu ObjectTableModel é adaptável para qualquer Object.
Qual a idéia principal? Como você consegue contar os parâmetros e fazer as colunas?

E outra.
Eu, como eu já devo ter falado, estou começando com swing agora.
O JTable é o componente ideal para exposição de dados tabulares? Eu usei o componente por causa do nome dele. Existe outro componente, com um nome menos sugestivo que seja utilizado para tanto?

E outra, já que eu não to fazendo nada.
Quando eu vou escrever textos num Panel, eu uso Label.
Eu acredito que label é um componente feito para colocar poucas palavras.
Mas eu gostaria de escrever textos mais longos no Panel, qual componente eu uso?

Valeu ae.

Pensando em nomes sugestivos, para escrever textos voce pode usar o JTextArea.

E sim, o JTable é a melhor forma mesmo.

Meu TableModel é baseado em Reflection e resolve os campos apenas com as Strings que voce passa como configuração e/ou anotações nas classes de modelo, fiz isso para deixar bem genérico mesmo.
Mas sem fazer um TableModel bem modelado voce precisa criar um para cada entidade mesmo.

JTextArea é input.
Eu queria escrever sobre o próprio JPanel, assim como o JLabel faz.

Humm… pior que não conheço nenhum componente que faça isso. Pior que mesmo com setEditable(false) ele ainda fica com cara de input desabilitado.

Um dia eu tava escrevendo um componente como esse que voce quer mas acabei não terminando.

Acredito que o JEditorPane sirva pra isso.