Originariamente inviato da Rynard
Ciao a tutti ho jTextPane contenente una porzione di testo evidenziata. Per evidenziare la porzione di testo ho usato oggetti Highlighter. Come posso fare per far lampeggiare il testo? Quello che vorrei è che quella parte evidenziata lampeggi in seguito a una determinata azione. Pensavo l'utilizzo di timer per far apparire e scomparire l'evidenziatura a intervalli di tempo.. però non so come fare.
Grazie
Ammesso che conosci gli offset di inizio/fine della porzione di testo all'interno del document, a seguito di eventi da un timer (intendo javax.swing.Timer, non quello in java.util) vai a cambiare gli "attributi" del testo nel document.
Sorgente di esempio creato "al volo":
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class TestFrame extends JFrame {
private StyledDocument styledDoc;
private JTextPane textPane;
private boolean blink;
public TestFrame() {
super("Test Frame");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(300, 200);
styledDoc = new DefaultStyledDocument();
textPane = new JTextPane(styledDoc);
try {
SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setForeground(attr, Color.BLUE);
styledDoc.insertString(0, "questo [ciao] lampeggia", attr);
} catch (BadLocationException e) {
// Non dovrebbe mai capitare
System.err.println(e);
}
JScrollPane scrollPane = new JScrollPane(textPane);
getContentPane().add(scrollPane);
Timer t = new Timer(300, new ActionListener() {
public void actionPerformed(ActionEvent e) {
blink = !blink;
SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setForeground(attr, blink ? Color.RED : Color.WHITE);
styledDoc.setCharacterAttributes(8, 4, attr, true);
}
});
t.start();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestFrame().setVisible(true);
}
});
}
}