Tem como quebrar linha na JTable?

3 respostas
B

Tem como quebrar linha na JTable?

Bom pessoal é o seguinte,estou utilizando interface gráfica e defaultTablemodel para customizar as colunas
na minha JTable que é preenchida de acordo com o retorno de um seletc *
do meu banco.O problema é que o resultado de uma coluna é bastante extenso,mais de 400 caracteres
e gostaria de saber se teria como quebrar a linha na jtable assim que atingisse um certo tamanho,
vou postar como tentei fazer e não deu certo na JTable e a imagem(não da pra ver o nome da coluna final mas é a coluna motivo):

Vector<Sobreaviso> lisSobreaviso = acessaBanco.consultarSobreaviso();//retorno do meu select * para um vetor do meu objeto
        DefaultTableModel modelo3 = (DefaultTableModel)getJTableSobreaviso().getModel();
        for (Sobreaviso i : lisSobreaviso)//for ate o tamanho total do meu select
        {
          String w = i.getMotivo();//getMotivo é a coluna com retorno de +-400 caracteres
          String concatena="";
	   for(int j=0;j<w.length();j++)
           {
	     if (j==200)
	       concatena+=w.substring(j,j+1)+"\n"; 
             else
	       concatena+=w.substring(j,j+1);
           }
				 
           modelo3.addRow(new String[] {Integer.toString(i.getCodigo()),i.getNome(),/* o resto das colunas*/,concatena});
        }

Tenho que colocar o width grande se não fica pior ainda,com os tres pontinhos no final:
jTableSobreaviso.getColumn(“Motivo”).setPreferredWidth(1000);

Essa string concatena funciona perfeitamente se eu coloco em um jTextPane,jTextArea ,em
um showmessage…Enfim ela quebra a linha normalmente porem quando adiciono no meu modelo aparece sem quebrar
ai fica aquela barra de rolagem imensa deixando minha tabela bastante extensa…Se alguem souber como
quebrar essa string de um jeito que funcione no Jtable ou um método para quebrar no JTable,ficarei grato…
Meu chefe ta na minha cola!!rsrs!!vlw galera!!

3 Respostas

G

Então, não tenho certeza se funciona, mas tente fazer igual ao JLabel.
Para quebrar uma linha no JLabel, vc coloca todo o conteúdo dentro de “<html> …(conteudo)… </html>” e quebra a linha com

<br>

Deve funcionar, visto que o Renderer padrão das células do JTable extendem de JLabel.
Então se vc quizer quebrar a linha sempre que tiver um ENTER no texto eh soh colocar:

StringBuilder str = new StringBuilder();
str.append("<html>");
str.append(texto.replaceAll("\n","<br>");
str.append("</html>");

e dai colocar o conteudo da célula com:

str.toString();

flw

B

Ok gerson vou tentar fazer desse jeito que você falou,qualquer coisa eu reporto aqui novamente!!vlw!!

B

Realmente tem como quebrar linha sim…Gerson valeu pela dica,mudei um pouquinho o seu código mas a ideia era aquela mesma.
Vou postar aqui como implementei e como ficou no programa se alguem tiver a mesma dúvida esta ai
a solução:

Vector<Sobreaviso> lisSobreaviso = acessaBanco.consultarSobreaviso();//retorno do meu select * para um vetor do meu objeto
DefaultTableModel modelo3 = (DefaultTableModel)getJTableSobreaviso().getModel();
for (Sobreaviso i : lisSobreaviso)//for ate o tamanho total do meu select
{
String motivo=""; 
motivo = i.getMotivo();//getMotivo é a coluna com retorno de +-400 caracteres   
String parte1="";   
String parte2="";
StringBuilder str = new StringBuilder();
if (motivo.length()>200)
{
str.append("<html>");   
parte1=motivo.substring(0,200);
str.append(parte1);
str.append("<br>");  
parte2=motivo.substring(201,motivo.length());
str.append(parte2);
str.append("</html>"); 
}else str.append(motivo);
	  
				 
modelo3.addRow(new String[] {Integer.toString(i.getCodigo()),i.getNome(),/* o resto das colunas*/,str.toString()});
}

Aumentei a altura da linha tbm:

jTableSobreaviso.setRowHeight(30);

O resultado foi esse:

Vlw ai!!!abraço.

Criado 30 de outubro de 2007
Ultima resposta 31 de out. de 2007
Respostas 3
Participantes 2