[Dúvida] - JTextPane (Attributes)

5 respostas
litium

E ai GUJ!

Anteriormente criei um tópico com quase o mesmo nome sobre JTextPane com dúvidas. Todas em relação a salvar e carregar arquivos que foram primeiramente editados em JTexPane. Agora a coisa aqui é outra. Ando tentando ainda programar um JTextPane funcional que salve, carregue, adicione imagens e efeitos em um JTextPane (pois acredito que não exista outra classe).

Meu problema, começa na hora de inserção e verificação de estilos no documento. Vejam o meu código de adiconar ou remover o negrito de um JTextPane:

public void setNegrito(JTextPane painel)
	{
		SimpleAttributeSet atributo = new SimpleAttributeSet();
		
		// Se caracteres estiverem em negrito, ele deixa normal.
		if(StyleConstants.isBold(painel.getCharacterAttributes()))
		{
			StyleConstants.setBold(atributo , false);
		}
		// Se caracteres não estiverem em negrito, ele deixa em negrito.
		else
		{
			StyleConstants.setBold(atributo , true);
		}
		
		painel.setCharacterAttributes(atributo, false);
	}
Curioso que esse código QUASE funciona. Exemplo:

Texto: TESTANDO

Você seleciona o texto acima por completo e adiciona o efeito. Primeiramente o efeito aparentemente funciona. Mas ao selecionar ele, se ele for selecionado da esquerda para a direita e o método for chamado, misteriosamente nada acontece. Porém! (Vejam o absurdo...) Se for selecionado da direita para a esquerda e, o método for chamado, ele deixa de estar em negrito. É como se a verificação não ocorresse do jeito que o usuário quer. E é uma coisa lógica isso! Pelo menos era pra ser...

Agora vejam o código de alterar o tamanho da fonte:
public void setTamanhoFonte(JTextPane painel , int tamanho)
	{
		SimpleAttributeSet atributo = new SimpleAttributeSet();
		
		StyleConstants.setFontSize(atributo , tamanho);
		
		painel.setCharacterAttributes(atributo , true);
	}
Digamos que nós temos este mesmo estilo de texto abaixo:

TESTANDO

TESTANDO

TESTANDO

Agora vamos pegar o terceiro testando e alterar o tamanho de sua fonte para uma fonte maior. Curiosamente funciona! Porém, ao selecionar o texto todo (tudo) do último caractere ao primeiro, uma mágica que eu nunca vi na vida acontece com o programa Java, todos os "TESTANDO" ficam de um tamanho pequeno só indefinido pelo usuário! Inacreditável...

O mesmo ocorre com a alteração de fonte do texto. Se eu deixar um "TESTANDO" com uma fonte e outro com outra e, selecionar tudo, eles ficam com a única fonte original (que estava por padrão).

VAI ENTENDER! Coisa de doido isso.

Estou humildemente aqui implorando a meus caros colegas do GUJ se eles conhecem alguma fonte de estudos sobre o JTextPane que possa me ser útil e de preferência (estou pedindo demais), completa. Que também possa me indicar uma fonte que talvez eu mesmo implemente um EditorKit para leitura e gravação de arquivos (pois o último que peguei aparentemente está com problemas). Preciso de material ou de ajuda. E acreditem, na parte falando sobre Swing no site da Oracle não tem muito sobre isso.

Obrigado a todos pela atenção e, aguardo anciosamente uma resposta.

Litium.

5 Respostas

Scorsatto

Ola litium.

Implementei um editor de texto em um JEditorPane uma vez.

e o que me ajudou muito foi este link, acredito que possa lhe ajudar tambem.

http://download.oracle.com/javase/tutorial/uiswing/examples/components/TextComponentDemoProject/src/components/TextComponentDemo.java

litium

Opa. E aí Scorsatto!

Cara, sinceramente eu não entendo muito de JEditorPane. Já que sou novo nisso, deixa eu perguntar para você que sabe: Com JEditorPane eu terei capacidade de estilizar o texto, adicionar imagens e ainda carregar a abrir arquivos com tais propriedades (isso sem conhecimento de HTML)? Se disser que sim, vou correndo ler o código que você me mandou. Acredite, não tenho idéia de como isso funciona, por isso tô te perguntando.

Obrigado pela atenção! :wink:

Litium.

Scorsatto

Prezado.

o codigo que postei é de criação de um editor baseado em “JTextPane”, no caso o que você necessita.
segue JNLP do mesmo ( execute e veja se lhe convem ).
http://download.oracle.com/javase/tutorialJWS/uiswing/components/ex6/TextComponentDemo.jnlp

Este exemplo usei como base para implementar o meu JEditorPane.
Quanto a suporte de imagens pelo JEditorPane TALVEZ o setContentType(“text/html”) do mesmo suporte, mas na empresa em que trabalho usamos “text/rtf” que não suporta imagens.

Acredito que com o exemplo você consiga implementar o seu JTextPane.

Qualquer duvida estou a disposição.

@EDIT
Este JNLP tem um exedmplo de JTextPane com imagem ( o porquinho^^ )
http://download.oracle.com/javase/tutorialJWS/uiswing/components/ex6/TextSamplerDemo.jnlp

litium

E aí Scorsatto!

Nossa, valeu aí pela dica e ajuda! Eu olhei o JNLP que você me indicou e achei interessante. Não tem o porquinho! :-o hehehehe… Quero um porco meu. Mas você me deu uma idéia, vou dar uma olhada no código fonte do exemplo do porco (não sei como não fiz isso antes). Se não der certo, vou ver o que faço e adiciono uma resposta aqui.

Obrigado pela ajuda! :wink:

Abraços!

Lititum.

Scorsatto

Foi mal litium,

Segue o link do “exemplo do porquinho^^”
http://download.oracle.com/javase/tutorial/uiswing/examples/components/TextSamplerDemoProject/src/components/TextSamplerDemo.java

Abraço.

Criado 1 de fevereiro de 2011
Ultima resposta 1 de fev. de 2011
Respostas 5
Participantes 2