Come sovrascrivere il testo di una JTextArea di Java

Scripta14

Nuovo Utente
95
8
Buongiorno,
avrei bisogno un aiuto o un suggerimento su come gestire la modifica del testo contenuto in una JTextArea.
Mi spiego meglio. Sto gestendo due textarea e a metà ho inserito un pulsante, che consente di riportare dalla textarea di sinistra il testo(con le opportune modifiche voluto) nella textarea di destra. La prima volta, il testo viene riportato correttamente secondo quando stabilito in base alle opzioni da applicare al testo. Mentre se modifico il testo nella textarea di sinistra, e ripremo il pulsante, il testo viene riportato correttamente in base alle opzioni impostate preliminarmente nella textarea di destra, ma viene accodato al testo già presente.
La mia necessità è quella di cancellare\socrascivere il contenuto della textarea di destra con il testo modificato nella textarea di sinistra.
Ho fatto alcune prova senza successo. Ho provato a gestire all'interno dell'evento legato al pulsante, l'evento che controlla la modifica del testo nella textarea di sinistra. Ho provato anche a modificare la textarea di destra con i doppi apici, pensando che mi cancellasse il contenuto. Riporto la porzione di codice relativa a quanto indicato.
Forse potrei gestire questa casistica utilizzando i vari metodi della classe JTextArea, cioè estrapolando la parte di stringa inserita successivamente, ma se la modifica viene fatta a metà del testo potrebbe essere complicato da gestire.
Per favore, qualcuno mi potrebbe suggerire qualche soluzione più smart?

Grazie a tutti
Codice:
pulsantePulisci.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                
                if(!textAreaDestra.getText().isEmpty()){
                   
                    textAreaSinistra.getDocument().addDocumentListener(new DocumentListener(){

                        @Override
                        public void changedUpdate(DocumentEvent arg0) {
                            
                            textAreaDestra.setText(textAreaSinistra.getText());
                            
                        }

                        @Override
                        public void insertUpdate(DocumentEvent arg0) {
                            // TODO Auto-generated method stub
                            
                        }

                        @Override
                        public void removeUpdate(DocumentEvent arg0) {
                            // TODO Auto-generated method stub
                            
                        }
                        
                    });
                    
                }
......
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,277
11,429
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
fai un textarea.setText("");
e subito dopo fai textarea.setText("secondatext");
 

Scripta14

Nuovo Utente
95
8
Grazie per la risposta.
Ho provato, ma continua ad accodare al testo già presente, il nuovo testo modificato. L'applicazione deve estrapolare solo le email. Questo viene fatto correttamente, ma alla vecchia estrapolazione viene accodata quella nuova.
Avevo già provato con la prima parte della tua soluzione, ma purtroppo non avevo risolto.

Ti riporto la modifica che mi hai indicato e la parte del codice interessato. Avresti qualche altra idea da suggerirmi?
Grazie

Codice:
pulsantePulisci.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                
                if(!textAreaDestra.getText().isEmpty()){
                    textAreaDestra.setText("");
                    textAreaDestra.setText(textAreaSinistra.getText());
}


                if(!chckbxNumeriReali.isSelected()&&textField.getText().isEmpty()
                        &&!chckbxEmail.isSelected()&&!chckbxCodiceFiscale.isSelected()) { 
                       
                    int n=JOptionPane.showConfirmDialog(null, "Non hai utilizzato le OPZIONI FILTRO!! Premendo OK verrà riportato"+
                                                         "l'identico testo", "Controllo", JOptionPane.WARNING_MESSAGE,
                                                         JOptionPane.WARNING_MESSAGE);                        
                
                
                if(n==0){
                    textAreaDestra.setText(textAreaSinistra.getText());
                }
                }else
                {
 
              .........


              //OPERAZIONE ESEGUITA DOPO LA PRESSIONE DEL PULSANTE
               if(chckbxEmail.isSelected()){
                        three="[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}";
                        Pattern p1=Pattern.compile(three); 
                        Matcher m1=p1.matcher(textAreaSinistra.getText()); 
                                                                        
                         
                        while(m1.find()) {
                            
                            listEmail.add(m1.group());  
                            s=listEmail.stream().collect(joining(" "));
                            s=s.replaceAll(" ", "\n"); 
                            
                            textAreaDestra.setText(s);
                               
                        }
                        }
}
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,277
11,429
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
puoi farmi vedere uno screen del programma cosi vedo il problema?
scrivi pure del testo a caso
 

Scripta14

Nuovo Utente
95
8
Ti ho allegato le immagini. Ho cercato di simulare la sequenza delle operazioni che vengono fatte.
Grazie.
 

Allegati

  • 1_CopioTesto_SelezionoOpzione.JPG
    1_CopioTesto_SelezionoOpzione.JPG
    43.6 KB · Visualizzazioni: 90
  • 2_PremoPulsante_textareaDestraTestoRipulito.JPG
    2_PremoPulsante_textareaDestraTestoRipulito.JPG
    48.5 KB · Visualizzazioni: 100
  • 3_AggiungoTestoTextAreaSinistra.JPG
    3_AggiungoTestoTextAreaSinistra.JPG
    46 KB · Visualizzazioni: 99
  • 4_RipremoIlPulsante_TestoAccodato.JPG
    4_RipremoIlPulsante_TestoAccodato.JPG
    54.3 KB · Visualizzazioni: 94

Skills07

Head of Development
Staff Forum
Utente Èlite
35,277
11,429
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
ok come ho detto prima di ripremere il tasto aggiungi o quello che è devi pulire l'area da capo e ricopiare il testo...
o altrimenti seconda ipotesi tenere conto dell'ultima riga copiata e aggiungere solo quella diversa(esempio se il primo testo finisce con mario rossi, e poi aggiungi mario verdi, devi tenere evidenza che l'ultima frase è mario rossi, e aggiungere solo mario verdi)
 

Scripta14

Nuovo Utente
95
8
Ti ringrazio per i vari suggerimenti. Ho trovato il motivo dell'errato funzionamento. Il textAreaDestra.setText("") è corretto. Il problema sta in una List<String> che avevo creato per gestire la visualizzazione delle email. Al secondo passaggio, giustamente, mantiene nella lista l'elenco precedente e con la nuova pressione del pulsante aggiunge nuovamente tutto il contenuto alla List.
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,277
11,429
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
ok perfetto, non avendo il codice sottomano ho suggerito l'ipotesi piu plausibile
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!