Come sovrascrivere il testo di una JTextArea di Java

#1
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

Utente Attivo
6,007
1,072
Hardware Utente
CPU
Intel core I5 3340
Dissipatore
zalman
Scheda Madre
ASUS P8B75-V
Hard Disk
Samsung Evo 850 250gb,2tb toshiba
RAM
16gb kingston hyper x fury blue 1666mhz
Scheda Video
Sapphire RX 580 8gb ddr5
Monitor
Samsung Smart TV Full HD 50 Pollici/ Hp ES 24 IPS
Alimentatore
XFX 80 plus 750 watt
Case
Aerecool xpredator x3
Sistema Operativo
Windows 10 Pro 64
#2
fai un textarea.setText("");
e subito dopo fai textarea.setText("secondatext");
 
#3
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

Utente Attivo
6,007
1,072
Hardware Utente
CPU
Intel core I5 3340
Dissipatore
zalman
Scheda Madre
ASUS P8B75-V
Hard Disk
Samsung Evo 850 250gb,2tb toshiba
RAM
16gb kingston hyper x fury blue 1666mhz
Scheda Video
Sapphire RX 580 8gb ddr5
Monitor
Samsung Smart TV Full HD 50 Pollici/ Hp ES 24 IPS
Alimentatore
XFX 80 plus 750 watt
Case
Aerecool xpredator x3
Sistema Operativo
Windows 10 Pro 64
#4
puoi farmi vedere uno screen del programma cosi vedo il problema?
scrivi pure del testo a caso
 

Skills07

Utente Attivo
6,007
1,072
Hardware Utente
CPU
Intel core I5 3340
Dissipatore
zalman
Scheda Madre
ASUS P8B75-V
Hard Disk
Samsung Evo 850 250gb,2tb toshiba
RAM
16gb kingston hyper x fury blue 1666mhz
Scheda Video
Sapphire RX 580 8gb ddr5
Monitor
Samsung Smart TV Full HD 50 Pollici/ Hp ES 24 IPS
Alimentatore
XFX 80 plus 750 watt
Case
Aerecool xpredator x3
Sistema Operativo
Windows 10 Pro 64
#6
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)
 
#7
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

Utente Attivo
6,007
1,072
Hardware Utente
CPU
Intel core I5 3340
Dissipatore
zalman
Scheda Madre
ASUS P8B75-V
Hard Disk
Samsung Evo 850 250gb,2tb toshiba
RAM
16gb kingston hyper x fury blue 1666mhz
Scheda Video
Sapphire RX 580 8gb ddr5
Monitor
Samsung Smart TV Full HD 50 Pollici/ Hp ES 24 IPS
Alimentatore
XFX 80 plus 750 watt
Case
Aerecool xpredator x3
Sistema Operativo
Windows 10 Pro 64
#8
ok perfetto, non avendo il codice sottomano ho suggerito l'ipotesi piu plausibile