Formatando linhas de uma JTable

11 respostas
T

Só Deus é testemunha do tanto q eu pesquisei e testei códigos antes de criar este post. ^^

Tô tentando criar uma linha de uma Jtable cujo texto seja uma String com mais de uma linha de texto. Exemplo: meu texto seria " aoiajoiaoidjaoijdoaijd
alkdjalkjdlakjlkjdlkajlkajklajlajal
lajlakjaljlakjalkjalkjalkjalajlkajlk".
Este texto tem 3 linhas, agora preciso colocar isso dentro de uma row da jtable. Tem como?

Se minha dúvida nao tiver clara eu posto um xls com o tabela q eu quero montar.

Desde já brigado!

11 Respostas

H

Oi Tiago,

Isso parece complicado, mas não é.
Basta utilizar HTML para montar o texto das células.
Isso funciona porque o renderer das células é um JLabel.

Vejamos um exemplo.
Se você criar uma tabela com os dados a seguir, cada célula vai ter três linhas de texto:

Object[][] data = {
  {"<html>textoA<br>textoB<br>textoC</html>"},
  {"<html>textoD<br>textoE<br>textoF</html>"},
  {"<html>textoG<br>textoH<br>textoI</html>"}
};

Já posso adiantar que você vai precisar aumentar a altura das linhas para conseguir ver todo o texto. Para isso, você deve usar o seguinte comando:

table.setRowHeight(60); // altura 60 pixels

Você provavelmente não vai poder deixar as células editáveis, porque o usuário vai ver o texto HTML quando ele tentar modificar o texto.

Espero ter ajudado. :slight_smile:

Grande abraço,
Hugo.

T

Arigatoo!
Arigatoo!

Nem sabia q funcionava em html a formataçao do label… Sou bebezinho em Swing ainda. ^^

Eu tava fazendo “\n” igual um doido! Ré, ré, ré!
Até cheguei a tentar inserir um JTextArea. Absurdo de burrice minha! o/

vlw mesmo hvidal!

Abraços!

T

bom, funcionou… mas a formataçao nao ta ficando boa… é q a linha fica com o texto sempre no meio… entao fica com um espaço antes do texto quanto mairo o texto mais eu tenho q aumentar a altura e maior fica o espaço antes do texto… Ç____Ç

H

Oi Tiago,

Coloque uma tela capturada no forum para que eu possa ver o problema.
(Botão “Anexar Arquivo” ao lado do botão “Enviar”)

Abraços,
Hugo.

T

Consegui resolve o problema do espaçamento exagerado e da quebra de linha e até aprendi a justificar o texto… Porém agora eu queria ifenizar todo o texto e quando justificar, nao pegasse a ultima linha pq senao fica esquisito…

O problema do espaçamento eu resolvi acrescentando as seguintes linhas: DefaultTableCellRenderer tcrColumn = new DefaultTableCellRenderer(); tcrColumn.setVerticalAlignment(JTextField.NORTH); tcrColumn.setHorizontalAlignment(JTextField.CENTER); helpTbl = new JTable(getHelpModel()); for(int i = 0; i < helpTbl.getColumnCount(); i++){ helpTbl.getColumnModel().getColumn(i).setCellRenderer(tcrColumn); }

Agora como faço pra justificar sem pegar a última linha? pegando a última linha eu consigo com a tag


e pra ifenizar?

De qualquer forma já vc me ajudou muito, Arigatoo ^^

H

Oi Tiago,

O problema agora começa a ficar mais voltado para o HTML do que para o java :smiley:

Acredito que para consertar o problema do texto justificado, você tenha que colocar uma quebra de linha no final da última linha, tipo:

<html>
  linha1<br>
  linha2<br>
  linha3<br>    <<< quebra no final da última linha
</html>

Para ifenizar, eu não sei bem como resolver.
Investigue mais sobre isso em HTML e veja se é possível.

Grande abraço,
Hugo.

T

Bom acabei desenvolvendo um método que recebe uma string sem formatação alguma e coloca nessa formataçao de html. Não fica ifenizado mas ao menos fica em varias linhas conforme o tamanho da string e o tamanho da celula q ela vai ficar. Nesse caso eu suponho q as linhas suportem 70 caracteres. Esse valor deve ser alterado dependendo de cada caso.

/**
	 * Recebe uma string sem formatação e aplica formatação de parágrafo para 
	 * melhor visualização. Usando tags HTML.
	 * 
	 * @param txt
	 * @return a String devidamente formatada.
	 */
	public String formatTxtForShowInTable(String txt){
		String txtFormated = "<HTML><P ALIGN=LEFT>";		
		String endTag = "<BR></P></HTML>";
		String jumpTag = "<BR>";		
		int count = 1;
		int i = 0;
		int lineSize = 70;
		int tempInt = txt.length()/lineSize;
		while (count <= tempInt){			
			txtFormated = txtFormated + txt.substring(i, (lineSize*count)) + jumpTag;
			i = i + lineSize;
			count++;
		}
		if (txt.length()%lineSize != 0){
			txtFormated = txtFormated + txt.substring(i);
		}
		txtFormated = txtFormated + endTag;
		return txtFormated;
	}

Pra quem quiser melhorá-lo, aceito sugestões ^^

Brigadao denovo hvidal!

H

Oi Tiago,

Uma melhoria imediata para o seu método seria utilizar a classe StringBuffer ao invés da classe String. Isso vai melhorar muito o desempenho do método. :slight_smile:

Se você não conhece a classe StringBuffer, procure conhecê-la. Vai valer a pena!

Grande abraço,
Hugo.

T

Valeu a dica!
estudando StringBuffer

Qualquer novidade posto aqui. ^^

Abraços!

T

Depois de ler um pouquinho sobre StringBuffer…

/**
	 * Recebe uma string sem formatação e aplica formatação de parágrafo para 
	 * melhor visualização. Usando tags HTML.
	 * 
	 * @param txt - String que deseja formatar.
	 * @param lineSize - Largura da linha.
	 * @return String formatada em parágrafos e entre as tags HTML.
	 */
	public String formatTxtForShowInTable(String txt, int lineSize){		
		StringBuffer txtFormated = new StringBuffer(txt);			
		int count = 1;				
		int tempInt = txt.length()/lineSize;
		while (count <= tempInt){			
			txtFormated.insert((lineSize*count), "<BR>");		
			count++;
		}		
		txtFormated.insert(0, "<HTML><P ALIGN=LEFT>");
		txtFormated.append("<BR></P></HTML>");
		return txtFormated.toString();
	}

Agora falta hifenizar.
Any help?? ^^

T

ah, outra dúvida. Eu fiz um teste texto tal o “texto tal” fica até azul e grifado igual a um link, porém ele nao muda o curso pra mãozinha nem fica clicável. Porque isso ?

Criado 2 de outubro de 2006
Ultima resposta 4 de out. de 2006
Respostas 11
Participantes 2