Sto sviluppando un semplice editor WYSIWYG RTF in Java e ho un piccolo problema. Devo essere in grado di sincronizzare i pulsanti di selezione della selezione di stile (come grassetto, corsivo, sottolineato) alla selezione del testo dell'utente. Ad esempio, se la selezione del testo corrente è semplice, i pulsanti di selezione grassetto, corsivo e sottolineato non sono selezionati, ma quando l'utente seleziona del testo in grassetto e sottolineato, i pulsanti di selezione grassetto e sottolineato sono selezionati.JTextPane Sincronizza l'interfaccia utente di selezione stile Problema
Ora sono abbastanza sicuro che lo JTextPane.getInputAttributes()
mi ottenga gli attributi di selezione che desidero ma c'è un problema con l'ascolto di eventi di aggiornamento caret. Il problema è che l'ascoltatore di caret collegato allo JTextPane
sembra essere chiamato DOPO che si verifica la modifica dell'attributo di input. Quindi la selezione è sempre un passo indietro. Cioè, devo selezionare il testo due volte prima che i pulsanti di commutazione siano aggiornati!
Il codice importante è:
textPane.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
syncAttributesWithUI(textPane.getInputAttributes());
}
});
E:
private void syncAttributesWithUI(AttributeSet attributes) {
boldButton.setSelected(StyleConstants.isBold(attributes));
italicButton.setSelected(StyleConstants.isItalic(attributes));
underlineButton.setSelected(StyleConstants.isUnderline(attributes));
}
Grazie in anticipo!
La tua domanda ha risposta? In caso contrario, considera un SSCCE –