Dúvida com JEditorPane

2 respostas
Metaleiro

[color=darkblue]Minha dúvida é a seguinte, estou usando um JEditorPane, ele funciona perfeitamente, mas quando coloco um LINK ele não fuciona, tenho o seguinte exemplo de um código HTML que utilizo, no Browser o código funciona perfeitamente mas quando coloco no JEditorPane não:
[/color]

JEditorPane jep = new JEditorPane ();
 jep.setContentType("text/html");
 jep.setEditable(false);
 jep.setText(getHTML());

O HTML:

<HTML>
<HEAD>
<TITLE> TESTE </TITLE>
<BODY style="background-color:#FFFFCC;">
<a href=/"#TESTE/"><BR>TESTE</a></BR>

<p ><b><h3 id=/"TESTE/"><hr>DOCUMENTO</b></p></h3></hr>
<p><h4>Campos da tabela :</p></h4>
<p>Aqui você encontra a explicação para cada campo</p> 


<p><FONT COLOR=/"#0000AA/"><b>Código  :</FONT></b> Campo com o código </p> 
<p><FONT COLOR=/"#0000AA/"><b>Descrição: </FONT></b> Campo com a descrição </p>

</BODY>
</HTML>

[color=darkblue]
Minha dúvida é como fazer esse código funcionar dentro de um JEditorPane, já que no Browser ele funciona corretamente ?

Visulamente aperece perfeitamente no JEditorPane e não ocorre nenhuma Exception, só quando clico no link ele não faz nada.

Se alguém puder ajudar, desde já agradeço !

[/color]

2 Respostas

ViniGodoy

Ahem… você já deu uma olhada no próprio javadoc da classe JEditorPane?

Se seu editor pane não for editável, ele gerará hiperlink events, que devem ser tratados… Se tivesse dado uma olhada no javadoc, veria o seguinte texto, com o código que explica como fazer o que você quer:

Some kinds of content may provide hyperlink support by generating hyperlink events. The HTML EditorKit will generate hyperlink events if the JEditorPane is not editable (JEditorPane.setEditable(false); has been called). If HTML frames are embedded in the document, the typical response would be to change a portion of the current document. The following code fragment is a possible hyperlink listener implementation, that treats HTML frame events specially, and simply displays any other activated hyperlinks.

class Hyperactive implements HyperlinkListener { public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { JEditorPane pane = (JEditorPane) e.getSource(); if (e instanceof HTMLFrameHyperlinkEvent) { HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent)e; HTMLDocument doc = (HTMLDocument)pane.getDocument(); doc.processHTMLFrameHyperlinkEvent(evt); } else { try { pane.setPage(e.getURL()); } catch (Throwable t) { t.printStackTrace(); } } } } }

Metaleiro

[color=darkblue] Eu tentei utilizar esse método, mas parece que ele é utilizado apenas para links externo, ou quando chamo uma outra página, debuguei o programa e ele não reconhece o evento que descrevi acima como um HyperlinkEvent.EventType.ACTIVATED, vou dar mais uma pesquisada.

Na verdade é um Link interno, eu aponto para dentro da própria página, funciona assim tenho um método que já retorna o HTML, ou seja, criei meu HTML em Texto puro e criei um método em java que o retorna, retorna a String:

[/color]

setText(getHTML()) 

public String getHTML(){ 

StringBuffer sb = new StringBuffer(); 

sb.append("AQUI ENTRA O HTML"); 

return sb.toString(); 

}

[color=darkblue]

Na interface coloco o JEditorPane dentro de um JScrollPane, visulamente funciona bem, o que não funciona são os Links internos, ou seja os links que apontam para um local específico dentro da mesma página.

Exemplo:

[/color]

<a href="#LINK">link</a> 

<h1 id="LINK">LOCAL QUE O LINK DEVERIA APONTAR E NÃO OCORRE</h1>

[color=darkblue]
A Saída do erro:

e.getURL() = URL Inválida

Muito obrigado pela ajuda !
[/color]

Criado 9 de abril de 2007
Ultima resposta 10 de abr. de 2007
Respostas 2
Participantes 2