[RESOLVIDO] Converter JTable para String

4 respostas
vinnysoft

Boa Tarde Pessoal.

Tenho uma dúvida e aceito sugestões:

Gostaria que os dados de uma JTable fossem inseridos formatados dentro de uma string, para mostrá-los em um JTextArea de forma que o usuário possa copiar toda a tabela para colar em um email, arquivo, etc.

Algo parecido com isto (mas com a divisao das colunas bem definidas):


Nome | Telefone | Endereco |
Joao | 9999-9999 | Rua teste1 |
Maria | 9999-9999 | Rua teste2 |
Jose | 9999-9999 | Rua teste3 |

Já pesquisei no fórum, mas não encontrei tópicos parecidos.

Fiz o teste com o StringBuilder dentro de um While, mas sem sucesso, pois as barras ao final da coluna continuam desproporcionais:

StringBuilder sb = new StringBuilder("");
            
            sb.append("|");
            sb.append(model.getValueAt(cont, 2).toString(), 1, model.getValueAt(cont, 2).toString().length());
            sb.append("|");
            sb.append(model.getValueAt(cont, 3).toString(), 1, model.getValueAt(cont, 3).toString().length());
            sb.append("|");
            sb.append(model.getValueAt(cont, 4).toString(), 1, model.getValueAt(cont, 4).toString().length());
            sb.append("|");

Se alguém tiver outra idéia melhor, favor postar!

Obrigado.

4 Respostas

ViniGodoy

Use uma fonte monoespaçada, como sans serif. E você também terá que ajustar o número de espaços antes de cada número.

vinnysoft

Vini,

Tentei alterar a fonte do JTextArea para Sans Serif, mas não deu certo.

Até que o espaçamento eu consegui fazer. O primeiro campo tem 50 caracteres, o segundo tem 20 e o terceiro tem 3. Da uma olhada no meu código:

while (cont < model.getRowCount())
        {

            msg.add("|" +
                    String.format("%1$-" + 50 + "s", model.getValueAt(cont, 2).toString()) +
                    "|" +
                    String.format("%1$-" + 20 + "s", model.getValueAt(cont, 3).toString()) +
                    "|" +
                    String.format("%1$-" + 3 + "s", model.getValueAt(cont, 4).toString()) +
                    "|\n");
            msg.add("_________________________________\n");
            cont++;
        }

        texto = texto + msg.toString().replaceAll(",","");
       
        return texto;

So que na saida, sai com as laterais das colunas diferentes (tirei print screen pq no html nao sai com os espacos)

Você teria algum código de exemplo da sua sugestão? Será que existe algum framework que facilite este trabalho?

Obrigado!


ViniGodoy

A imagem que você passou não está com uma fonte monoespaçada. Sem uma fonte assim, será muitíssimo difícil fazer o que você quer.

Se você está passando isso para um HTML, certifique-se de que o css do local que recebe o texto esteja com o estilo de fonte configurado para monospaced.

vinnysoft

Obrigado Vini!

Funcionou aqui! :lol: :lol:

Não estou passando para HTML, estou colocando em um JTextArea normal. O que eu fiz foi utilizar a fonte FreeMono. Utilizo o NetBeans 6.9.1.

Obrigado pela ajuda!


Criado 19 de março de 2011
Ultima resposta 20 de mar. de 2011
Respostas 4
Participantes 2