Sto usando un JTextPane
per visualizzare caratteri e simboli, dove questi ultimi sono rappresentati da colori personalizzati JComponents
. Ad esempio, il riquadro di testo potrebbe mostrare qualcosa del tipo: Il riquadro di testo è modificabile dall'utente ed è consentito all'utente di aggiungere più simboli tramite un pulsante in qualsiasi posizione e in sostituzione del testo selezionato. Lo faccio tramite il metodo JTextPane.insertComponent()
. Ad un certo punto dell'applicazione devo sapere cosa viene visualizzato nel riquadro di testo, e con questo intendo non solo il testo inserito, ma anche i componenti esatti contenuti all'interno.Ottieni un componente da un JTextPane tramite javax.swing.text.Element?
Sono passato attraverso numerosi problemi con Positions
e DocumentListeners
per gestire il contenuto del mio riquadro di testo, ma ho continuato a causare più problemi di quanti ne stavo risolvendo. Ecco perché alla fine ho deciso che i miei problemi sono probabilmente dovuti a un errore di progettazione da parte mia, quindi ho deciso di vedere se non riesco ad accedere ai miei componenti attraverso il pannello di testo.
Ricerca nella documentazione e nel codice sorgente di AbstractDocument
e in altre classi correlate, ho trovato l'interfaccia javax.swing.text.Element
. Poi ho lasciato la mia uscita applicazione
for(int i = 0; i < textPane.getDocument().getLength(); i++) {
System.out.println(((StyledDocument) textPane.getDocument()).getCharacterElement(i));
}
che mi ha dato:
LeafElement (contenuto) 0,4
LeafElement (contenuto) 0,4
LeafElement (contenuto) 0 , 4
LeafElement (contenuto) 0,4
LeafElement (componente) 4,5
LeafElement (contenuto) 5,9
LeafElement (contenuto) 5,9
LeafElement (contenuto) 5,9
LeafElement (contenuto) 5,9
LeafElement (componente) 9,10
Visto che il LeafElements
che ho ottenuto sembrano avere qualche tipo di informazione su ciò che viene visualizzato in quale posizione nel Document
, ho pensato che deve essere possibile ottenere il contenuto effettivo in quella posizione. Dopo aver cercato per un'altra mezz'ora come rappresentare il contenuto di ognuno degli elementi, ho rinunciato e ho deciso di postare la mia domanda qui, sperando che alcuni di voi potessero sapere come ottenerlo !?
Ho visto questo question cui qualcuno tenta di accedere ai componenti attraverso textPane.getComponents()
, che restituisce un array di componenti con il numero esatto di componenti effettivamente contenuti nel JTextPane
, ma sono tutti di tipo javax.swing.text.ComponentView$Invalidator
, che è ovviamente di inutile per me. Forse non vedo come continuare correttamente da qui, perché un cast per il tipo originale del mio simbolo non funziona.
tl; dr
Come faccio ad avere un JComponent
, che si trova all'interno del testo di un JTextPane
, e la sua posizione dal riquadro di testo?
Speriamo che questo [risposta] (http://stackoverflow.com/a/10463120/1057230), potrebbe in grado di contribuire a fornire qualche idea per quanto riguarda il posizionamento thingy. +1 per più attenzione :-) –
@Gagandeep Bali Grazie per l'attenzione :-). La tua risposta è interessante, ma sfortunatamente non si applica al mio problema, perché non ho bisogno di conoscere la 'Location' del componente, ma piuttosto la posizione as-in: index all'interno del testo. Tutto ciò è comunque inutile, se non riesco ad accedere al componente stesso, che è assolutamente necessario per il mio scopo. – nfs
Ahha, questa conoscenza è al di là della mia comprensione, per ora. Desideri qualcuno con saggezza, essere in grado di mettere presto in luce l'argomento :-) MEGLIO DI FORTUNA ... –