[Resolvido] - JTextPane (I/O e I/O de imagens)

Boa noite!

Olá pessoal do GUJ. Atualmente tenho tido problemas com a organização de umas anotações minhas para estudo. Faço tudo no bloco de notas mas acho um saco para se ler depois. Mal dá para visualizar as letras direito e é horrível ter poucas opções para organização do texto.

Eu estou precisando de umas dicas de como salvar e carregar/abrir o conteúdo de um JTextPane em um arquivo, e qual seria o tipo de arquivo. Procurei na documentação do Java, aqui:

http://download.oracle.com/javase/tutorial/uiswing/components/generaltext.html

Mas não encotrei coisas sobre. Já até fiz isso com JTextArea salvando e abrindo arquivos TXT utilizando FileWriter e FileReader, mas nunca com JTextPane ou JEditorPane cujo temos imagens, cores e muitas outras coisas.

Se alguém puder me indicar algo, ficarei grato.

Puts… :frowning:

Ninguém sabe mesmo? Já se passou mais ou menos uma semana e ninguém aqui sabe!? Será então que em outra sessão do fórum alguém pode me ajudar? Tô precisando mesmo de ajuda quanto a isso. Qualquer tipo de dica ou material será de grande ajuda mesmo.

Não queria criar outro tópico sobre a mesma coisa. Mas acontece que passou 1 semana já sem ninguém me ajudar, e eu tô precisando… :frowning:

Aguardo alguém dar sinal de vida.

Abraços GUJ.

Entendo que queira abrir outro tópico para mesma dúvida, já que ninguém respondeu este, mas acho que resultaria no mesmo. Se mesmo com o up no tópico ninguém respondeu, não é por maldade. Talvez quem bateu o olho o tópico realmente não saiba tirar a dúvida.

Eu sou uma das pessoas que não sabem tirar sua dúvida :lol: , mas olhando no final do link que você indicou, tem uma parte falando sobre Editor Kits, que possui o método write. Talvez a pesquisa deva direcionada para este lado.

Aparentemente serve para escrever o conteúdo do Document em um OutputStream ou Writer. Acho que deve te ajudar. Para obter o EditorKit pode usar o método getEditorKit() do text pane ou editor pane.

Espero que a dica ajude em algo.

Falou…

Caaaaaara!

Eu tinha lido a página que te mandei até mais ou menos ali (na verdade, antes dali, parei de ler). Estava ficando entediado de não achar nada ali e fui procurar no google. Fechei a própria página que estava lendo e vim aqui no GUJ procurar algo nos artigos. Nada também! Daí decidi criar um tópico sobre isso.

Eric, valeu pela dica. Vou dar uma olhada aqui direitinho de novo e vou tentar fazer uns testes. Caso eu tenha sucesso em algo, vou ver se posto a solução aqui para dividir com a comunidade GUJ. :wink:

Brigadão aí e um abraço! :-o

Olá GUJ!

Andei pesquisando umas coisas naquele link que eu postei anteriormente. Fiz um programa simples usando JTextPane com funções de mudança de cor, tamanho, fonte e a capacidade de inserir imagens até. O problema encontrou-se na hora de salvar e carregar o arquivo final.

Eu li que eu posso utilizar um StyledEditorKit para poder realizar as devidas operações:

“Reads and writes styled text, and provides a minimal set of actions for styled text. This class is a subclass of DefaultEditorKit and is the editor kit used by JTextPane by default.”

Então resolvi utilizar seus métodos write() e read(). Vou colocar a parte do meu código que salva e também a que carrega arquivos aqui.

Aqui é realizado a gravação do documento:

[code]
StyledEditorKit editor = new StyledEditorKit();

		try
		{
			FileOutputStream output = new FileOutputStream(new File("E:/java testes/arquivo.jtp") );
			
			// PARÂMETROS
			// 1 - OutputStream
			// 2 - StyledDocument
			// 3 - Posição (int)
			// 4 - Tamanho (int) - Não entendi muito bem isso!
			editor.write(output , this.documento , 0 , this.painelTexto.getText().length() );
			
			output.close();
		} 
		catch (IOException exception)
		{
			exception.printStackTrace();
		} 
		catch (BadLocationException exception)
		{
			exception.printStackTrace();
		}[/code]

E aqui, a parte de carregamento de arquivo:

[code] StyledEditorKit editor = new StyledEditorKit();

		try
		{
			FileInputStream input = new FileInputStream(new File("E:/java testes/arquivo.jtp") );
			
			editor.read(input , this.documento , 0);
			
			input.close();
		} 
		catch (FileNotFoundException exception) 
		{
			exception.printStackTrace();
		} 
		catch (IOException exception)
		{
			exception.printStackTrace();
		}
		catch (BadLocationException exception) 
		{
			exception.printStackTrace();
		}[/code]

O único que ocorre, é que o texto realmente é salvo. Mas a cor do texto, a fonte e o tamanho da fonte, todos não são salvos. E quando coloco uma imagem e tento salvar, nada também. Não acontece nenhum erro e nem nada quando se salva. Mas ao carregar, a imagem não aparece e o texto aparece sem nenhum estilo.

Meu código tem 300 linhas mais ou menos. Será que seria incômodo colocá-lo aqui?

Tô precisando de ajuda, quem puder, agradeço.

Abraços GUJ!

É só um palpite, mas tente criar um RTFEditorKit no lugar do StyledEditorKit e salvar o arquivo como rtf.

CARA! :-o

Funcionou por parte! Obrigado pela dica! Digo… Consegui realmente salvar e carregar textos com cor, tamanho diferente e fontes diferentes também! Testei com relação ao tipo do arquivo. Não é necessário que o arquivo seja exatamente .rtf não . Pode ser qualquer arquivo “inventado pelo programador”. Ele lê direitinho como a pessoa deseja.

O que acontece, é que ao tentar salvar uma imagem dentro do JTextPane, ela aparenta ser salva, mas ao carregar o arquivo, nada dela aparecer ali. De fato, aparece um caractere em branco, indicando que “aquilo” foi salvo, mas a imagem não é demonstrada.

E o que você acha que devo fazer agora? E o mais curioso, de onde veio o palpite de que a classe RTFEditorKit poderia resolver isso? :x

Abraços pessoal do GUJ!

Puxa, agora não tenho ideia do que possa estar gerando o problema. Ah, sobre o palpite, eu pensei que funcionaria porque o Word consegue abrir arquivos rtf sem perder a formatação, então porque o editor kit não conseguiria? :smiley:

Boa sorte, espero que consiga resolver.

E aí Eric Yuzo!

Cara, mal a demora para responder. Mas andei pesquisando e pesquisando… A única coisa que encontrei que me deu uma luz (mas trevas ao mesmo tempo), foi isso aqui:

http://www.cs.cf.ac.uk/Dave/HCI/HCI_Handout_CALLER/node123.html

Tem uma parte que o carinha fala assim:

“The current Swing RTFEditorKit class will not handle graphical images embedded in the RTF file. If graphics do exist, the RTF parser will simply ignore them. The best way to demonstrate the Swing mechanism for viewing RTF is with an example.”

Foi exatamente o que aconteceu comigo. Ou seja, adeus RTFEditorKit…

Também encontrei um outro carinha dizendo que um pacote do apache consegue ler arquivos .doc e .rtf do programa microsoft word pad. Só que poxa, eu não quero ler programas RTF, bem podia, mas não quero. Até para salvar textos com imagens no wrod pad, ele não salva. Sempre se perde o que se fez. Quero apreender a fazer isso no próprio Java. Não é possível que não tenha isso! Tem que ter! Vocês tão escondendo isso de mim!!! (desespero… mal aí… :cry: )

Mãs… Ah! Tentei também postar um tópico no próprio fórum da Oracle:

http://forums.oracle.com/forums/thread.jspa?threadID=2155391&stqc=true

Eu postei ontem o tópico e ainda não me responderam. Pô, os caras lá entendem um pouco mais, certo? Eles têm todo aquele tutorial que a sun disponibilizou em inglês que é uma coisa muito fácil para eles. Esperançosamente, espero esperando que eles respondam algo.

Ainda continuo aguardando “o escolhido” para a resolução de tal problema. “Aquele” que revelará os poderes do outro lado. Sei que falei muita bobeira aqui, mas ficar não sei quantas horas aqui na tela do pc procurando coisas sobre isso, faz desastres ao cérebro. Prometo que na próxima volto ao normal.

Quem tiver alguma informação adicional que possa me ajudar, por gentileza, sinta-se obrigado(a) a dividí-la! :lol::wink:

Ainda em aguardo.

Abraços GUJ (desculpem pelo besterol)

Litium.

E aí GUJ! :-o

Depois de pesquisar e conversar um pouco no fórum da oracle, eu consegui finalmente a minha resposta. Aparentemente um carinha conhecido como StanislaviL desenvolveu um projeto que resolveu meu problema. Ele me disse que eu poderia conseguir implementar imagens em meu JTextPane utilizando um de seus Jars.

Me passou o seu site e pediu que eu baixasse o arquivo rtfkit_nosrc.jar que contém algumas ferramentas para me auxiliar nesse problema que já estava me matando. :lol:

Basicamente, quando você cria um JTextPane, você integra a ele um tipo de Document utilizando ou seu construtor, ou o método setDocument. E quando se ia salvar, usávamos a classe RTFEditorKit para tal pegando justamente o Document do JTextPane. De fato o RTFEditorKit consegue sim salvar e ler textos com cores, tamanhos e fontes diferentes. Mas ele não te dá suporte I/O para manipular imagens. Isso tem no link que eu mandei anteriormente para quem quiser ver.

No arquivo jar que o StanislaviL pediu que eu baixasse, eu encontrei duas classes diferentes:

  • AdvancedRTFDocument --> Uma subclasse de DefaultStyledDocument (eu acredito)
  • AdvancedRTFEditorKit —> Uma subclasse de RTFEditorKit

Não tem dificuldade aqui. É só substituir a fórmula antiga pela nova. Ao invés de jogar um DefaultStyledDocument para o JTextPane, usamos o AdvancedRTFDocument. Na hora de salvar ou abrir, usamos os métodos read ou write da classe AdvancedRTFEditorKit para ler e salvar arquivos, respectivamente.

Tem um detalhe aí. StanislaviL me disse que ao salvarmos imagens em um arquivo dessa forma, cada imagem salva muda seu formato para PNG pois, o próprio Word Pad tem como padrão de imagens o formato PNG. E outra, não é possível salvar imagens GIF com suas animações. Se você for salvar um GIF, ao carregar, a imagem fica travada sem sua animação (por ter sido salva em png). E o motivo disso, como o próprio StanislaviL falou:

“Actually we need a way to save the gifs. For java it’s not a problem to parse gifs but saving wasn’t included in the codecs because of missing rights for compression algorithm used in the format.”

Bem… Uma “mão na roda” isso para mim. Resolveu muita coisa.

Para quem quiser dar uma olhada no site do StanislaviL, segue o link: http://java-sl.com/advanced_rtf_editor_kit.html
Quem quiser da uma olhada no meu tópico do fórum da Oracle: http://forums.oracle.com/forums/thread.jspa?threadID=2155391&stqc=true

Dividam informação. Compartilhem conhecimento que o país vai pra frente! :wink:

Abraços GUJ.

Litium.

Desculap eu abrir o post de novo mas nao to conseguindo fazer o exemplo q vc postou no forum usando AdvancedRTFEditorKit, nao exibe nada. tem alguma dica?