Olá GUJ!
Desenhando uma GUI, preciso exibir um texto em um componente (a princípio um JTextPane) e habilitar que determinadas frases sejam coloridas e que ao serem clicadas possam disparar eventos na interface gráfica. Alguém sabe como posso realizar isso?
Grato à todos desde já.
com este método você captura o evento do TextField.
jTextField1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//your code here
}
});
Não é isso que estou querendo. Não domino o assunto, seria algo como um Listener para o texto, e não para a caixa de texto.
Preciso que SOMENTE TRECHOS sejam “clicáveis” e coloridos à parte.
Grato pela resposta.
Um documentfilter ajuda um monte na hora de colorir textos, exemplo aqui:
http://www.guj.com.br/java/279904-resolvidomudar-cor-texto-em-jtexarea-ou-jtextpane
Para serem clicáveis, um MouseListener dá conta do recado, o problema são esses “SOMENTE TRECHOS”.Talvez por um mouse listener que “ouça” apenas os trechos que lhe sejam pertinentes(esperando uma tal sequencia de caracteres, senão ignora a execução da ação).
Com um JEditorPane eu consigo fazer isto…
Crie um JEditorPane e faça o seu texto com HTML. Os trechos coloridos você faz com a tag e os clicáveis com a tag . No JEditorPane você coloca um HyperlinkListener para capturar um clique nos links.
Exemplo:
JEditorPane jep = new JEditorPane("text/html", "");
jep.addHyperlinkListener(new HyperlinkListener() {
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
switch(e.getDescription()){
case FAZ_ALGO:
fazAlgo();
break;
case FAZ_OUTRA_COISA:
fazOutraCoisa();
break;
}
}
}
});
String texto = "<html>"+
"<head>"
"<style type='text/css'>"+
".cor{#00ffff}"+
"</style>"+
"</head>"
"<body>"+
"Lorem <span class='cor'>ipsum</span> dolor <a href='fazAlgo'>sit amet</a>, consectetur adipiscing elit."+
"</body>"+
"</html>";
jep.setTexto(texto);
No HREF das tags você coloca palavras-chave para capturar e comparar para qual evento elas apontam. Lembrando que as cores CSS no JEditorPane devem ter obrigatoriamente 6 caracteres, não funciona se simplificar por exemplo de #ffffff para #fff.