Newsgroup: it.comp.java
Titolo: DocumentListener

Come faccio a fare in modo che se scrivo un testo in una JTextArea alla
chiusura della finestra mi venga chiesto di salvare le modifiche
effettuate?Come in Word che quando chiudo il prog mi chiede di salvare le
modifiche.
Ho guardato la classe DocumentListener,ma mi chiama il metodo insertUpdate
ogni volta che scrivo un carattere nella JTextArea....
Blood


puoi aggiungere alla jtextarea un keylistener in modo che ogni volta che 
premi un tasto x inserire del testo, tale listener abbia accesso e 
modifichi un flag booleano che indica se il documento e' stato 
modificato o meno, e quindi se e' necessario richiedere il salvataggio 
delle modifiche
ciao
Cappe

 delle modifiche
Ho fatto quello che mi hai suggerito e funziona.
L'unico problema è che se non voglio salvare le modifiche ho errore.
Il programma dovrebbe prendere il testo e a seconda di un intervallo scelto
dall'operatore, visualizzare una casella di testo al posto della parola che
capita in posizione intervallo e multipli di intervallo.
Se non salvo le modifiche effettuate, mi viene visualizzato un'unica label
contenente tutto il testo.
Forse è un po' incasinata come spiegazione.....cmq grazie lo stesso.
Blood

 Blood
infatti non ho capito niente :\
Alberto


:-)
Non so come spiegartelo.
Se io accetto di salvare le modifiche al file aperto, tutto funziona.
Se io non accetto le modifiche...è come se il file rimanesse
aperto..credo...ho usato il metodo FileWriter.close() ma non sembra
funzionare....boh.
Blood


perche' non lo apri/chiudi dopo aver deciso di salvarlo? e lo chiudi 
appena caricato? non dovresti aver problemi...
oppure potresti copiare qui il codice, almeno capirei un po di piu' :P
ciao
Cappe

 Cappe
Questo è il metodo che mi apre il file di testo
    public void openCloze()
 {
   chooser.setCurrentDirectory(dir);
   int response = chooser.showOpenDialog(frame);
   whatsResponse = new Integer(response);
   if(response == chooser.APPROVE_OPTION)
   {
    try
    {
     f = chooser.getSelectedFile();
     Reader in = new FileReader(pulisciTesto(f));
       //Scrivo sull'area di testo il contenuto del CLOZE
     areaTesto.read(in,null);
     //Il titolo della finestra è quello del CLOZE scelto
     frame.setTitle(f.getName());
     in.close();
    }
    catch(IOException e){
     JOptionPane.showMessageDialog(frame,"Errore di I\\O","Errore",
     JOptionPane.ERROR_MESSAGE);}
   }
   else
    if(response == chooser.CANCEL_OPTION)
     chooser.setEnabled(false);
  }
(il CLOZE è un file di testo che dopo ogni parola ha il simbolo " | ")
Questo è il metodo per salvare
 public void salvaCloze(File clozeText)
 {
  isTextEdit = false;
  try
  {
   //Scrivo su file il contenuto dell'editor
   out = new BufferedWriter(
    new FileWriter(clozeText));
   String text = areaTesto.getText();
   char[] c = text.toCharArray();
   StringBuffer buffer = new StringBuffer();
   for(int i = 0; i<c.length; i++)
    if(c[i] == ' ' || c[i] == '\n')
     buffer.append(c[i]+"|");
     else
     buffer.append(c[i]);
   out.write(buffer.toString());
   out.close();
   //Il titolo della finestra diventa quello del
   //file appena salvato
   frame.setTitle(clozeText.getName());
  }catch(IOException e)
  {
   JOptionPane.showMessageDialog(frame,
   "Errore di scrittura del file","Errore",
     JOptionPane.ERROR_MESSAGE);
  }
 }
Blood

 modifiche ho errore.
Ho capito l'errore!!:-)
In pratica, quando scrivo un testo e lo salvo, viene salvato in questo modo
parola1| parola2| parola3|
Quando apro uno di questi testi, lo passo ad un metodo che si occupa di
ripulire il testo dal carattere | altrimenti salvando il testo con il
carattere | salverei qualcosa come
parola1|| parola2|| parola3||
ecc...
Il problema era che se non salvo il testo con il carattere | che funge da
token, ho un normalissimo testo e il programma non svolge la sua funzione ma
mi ridà il testo tale e quale.
Il programma dovrebbe prendere questo testo e a seconda di un intervallo
scelto a runtime, visualizzare a schermo questo (suppongo intervallo = 2)
Ciao ____ tutto ____ neswgroup
al primo ____ ci metto "a" e al secondo "il"
Aprendo visualizzando e chiudendo il testo, il salvataggio avveniva ma in
modo errato (cioè senza carattere |) e l'ho risolto in modo che quando
chiudo la finestra, anche se non faccio nessuna modifica al testo, aggiungo
a tale testo il carattere |...non sarà una soluzione elegante ma
funziona!;-)
E' un po' più chiaro ora??
Scusate se le spiegazioni sono contorte, ma spiegare e capire qualcosa che
non si vede non è semplice!:-)
Blood