Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123

    [Java] Probelmi con JFileChooser

    Ciao a tutti,

    Ho un problema con JFileChooser!
    Una volta aperto un file, e apportate le modifiche del caso, lo salvo..il problema, è che, se il file che ho aperto si trova in Documenti, il file che salva lo mette sul desktop!! (in pratica, fa una copia dello stesso file, aggiungendo le modifiche che ho appena apportato..ma il file in Documenti non viene modificato!!)

    Perchè? E come risolvo? :grat:

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] Probelmi con JFileChooser

    Originariamente inviato da Patrick Jane
    Una volta aperto un file, e apportate le modifiche del caso, lo salvo..il problema, è che, se il file che ho aperto si trova in Documenti, il file che salva lo mette sul desktop!! (in pratica, fa una copia dello stesso file, aggiungendo le modifiche che ho appena apportato..ma il file in Documenti non viene modificato!!)

    Perchè? E come risolvo? :grat:
    Il JFileChooser ti dà un java.io.File. Tu usi esattamente questo File sia per la lettura che per la scrittura? O no?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Mi spiego meglio..
    Dunque, ho necessita di salvare in Txt, oppure in PDF..quindi ho scritto questo

    codice:
     else if(cmd.equals("Apri..")) {
      int value = fc.showOpenDialog(frametext);
        
      // Verifico sia stato digitato Ok
      if(value==JFileChooser.APPROVE_OPTION) {
        File file = fc.getSelectedFile();
    
        int i = file.getName().lastIndexOf(".");
        String ext = file.getName().substring(i);
        ed.setStato(true);
        // Leggo l'estensione   
        if(ext.equals(".rtf") || ext.equals(".RTF")) {
          openRTF();
        }
         else {
           open();
         }
       }
     }
    Il fatto, come si evince.. è che quando chiamo il metodo openRTF(), oppure open()..non ho l'oggetto file appena ottenuto! (stavo infatti pensando di mettere la variabile File fuori da questo blocco, in modo da renderla visibile), quindi ho pensato di richiamare una seconda volta getSelectedFile(). Può dipendere da questa cosa?

    E, una volta aperto e cliccato su "salva" controllo che il documento sia già stato salvato in precedenza..
    all'interno di saveRTF() c'è:
    codice:
      private void saveRTF() {
        StyledDocument doc = ed.getPane().getStyledDocument();
    	RTFEditorKit kit = new RTFEditorKit();
    	try {
    	  File file = new File(tab.getTitleAt(index));
    	  FileOutputStream fin = new FileOutputStream(file);
    	  kit.write(fin,doc,0,ed.getPane().getText().length());
    	  tab.setForegroundAt(index,Color.BLACK);
    	} catch(Exception e) {}
      }
    è corretto in questo modo?

    PS: Il problema si presenta con entrambi i salvataggi (sia rtf sia txt).

    Grazie!!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    è corretto in questo modo?
    No, non proprio. Se hai l'editing su più "schede" con un JTabbedPane, sarebbe più furbo "incapsulare" e tenere referenziato il java.io.File nel pannello (o altro che sia) che è nel tab. Insomma ... ognuno ha il suo.
    Usare il titolo .... beh, non sarebbe il massimo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da andbin
    No, non proprio. Se hai l'editing su più "schede" con un JTabbedPane, sarebbe più furbo "incapsulare" e tenere referenziato il java.io.File nel pannello (o altro che sia) che è nel tab. Insomma ... ognuno ha il suo.
    Usare il titolo .... beh, non sarebbe il massimo.
    Intendi quindi aggiungere il file al JTabbedPane in questione?

    Per inserire la nuova scheda chiamo

    codice:
    class Editor extends JPanel {
      private JTextPane area;
      private JScrollPane barra;
      private boolean stato;
      
      Editor() {
        super(new BorderLayout());
        area = new JTextPane();
        area.setEditable(true);
        stato = false;
        
        barra = new JScrollPane(area);
        add(barra, BorderLayout.CENTER);
      }
      
      public boolean getStato() {
        return stato;
      }
      public void setStato(boolean stato) {
        this.stato = stato;
      }
      
      public JTextPane getPane() {
        return area;
      }
    }
    (stato lo utilizzo per capire se il documento è stato in precedenza salvato o meno, quindi se prima di una chiamata a "salva" era già stata fatta una chiamata a "salva come..".)

    A questa classe aggiungo un metodo così da inviare un oggetto File contenente il file in questione quindi?

    Grazie!

    EDIT: Il problema si presenta anche se salvo su Documenti..salvando in Documenti crea una copia sul desktop (che è dove risiede il programma .java e i class). Precisando, Il problema si verifica quando premo il "salva" sia se il file è già stato salvato, sia se non lo è mai stato.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    A questa classe aggiungo un metodo così da inviare un oggetto File contenente il file in questione quindi?
    Sì, penso sia una buona idea mettere in Editor un campo di tipo java.io.File.

    Non so come si comporta di preciso il tuo editor ma supponiamo che abbia le classiche 4 opzioni File->Nuovo, File->Apri, File->Salva, File->Salva come

    Se fai Nuovo, il campo File sarebbe null, si immagina appunto che tu crei la "scheda" con l'editor vuoto.
    Se fai Apri, al campo File ci assegni esattamente quello che fornisce il JFileChooser (pari pari, non devi separare, modificare nulla nel path ... perché dovresti, no?).

    Ora ci sarebbero diversi casi per salvare: se fai solo "Salva" e il campo File non è null, usi quello per scrivere il file. Se è null, fai come se fosse "Salva come".

    E "Salva come" aprirebbe il JFileChoser in modalità "save" e il File fornito lo usi per aggiornare quel campo. Come vedi tutto quadra, nel senso che è "logico" come comportamento.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da andbin
    Sì, penso sia una buona idea mettere in Editor un campo di tipo java.io.File.

    Non so come si comporta di preciso il tuo editor ma supponiamo che abbia le classiche 4 opzioni File->Nuovo, File->Apri, File->Salva, File->Salva come

    Se fai Nuovo, il campo File sarebbe null, si immagina appunto che tu crei la "scheda" con l'editor vuoto.
    Se fai Apri, al campo File ci assegni esattamente quello che fornisce il JFileChooser (pari pari, non devi separare, modificare nulla nel path ... perché dovresti, no?).

    Ora ci sarebbero diversi casi per salvare: se fai solo "Salva" e il campo File non è null, usi quello per scrivere il file. Se è null, fai come se fosse "Salva come".

    E "Salva come" aprirebbe il JFileChoser in modalità "save" e il File fornito lo usi per aggiornare quel campo. Come vedi tutto quadra, nel senso che è "logico" come comportamento.
    Prima che rispondessi ho trovato un'altra soluzione, anche se mi sembra poco "ad oggetti".

    Ho creato una stringa di nome "path", inizialmente vuota, e ogni volta che apro un file accade che path diventa uguale a file.getPath()...al momento del salvataggio passo "path" al costruttore File.

    Secondo te può andare così, o è poco ad oggetti come approcio? (e quindi più corretto nel modo indicato prima?)

    Grazie!!

    PS: Molto interessante il modo indicato da te comunque.. soprattutto mi farebbe risparmiare qualche riga probabilmente^^

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    Ho creato una stringa di nome "path", inizialmente vuota, e ogni volta che apro un file accade che path diventa uguale a file.getPath()...al momento del salvataggio passo "path" al costruttore File.
    Ma perché dovresti dei String?? JFileChooser fornisce già un bel java.io.File.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da andbin
    Ma perché dovresti dei String?? JFileChooser fornisce già un bel java.io.File.
    ...cioè, stai dicendo che tramite l'istanza di fc posso ottenere il path?

    Scusa ma sto dormendo da seduto xD

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Patrick Jane
    ...cioè, stai dicendo che tramite l'istanza di fc posso ottenere il path?
    getSelectedFile() di JFileChooser ritorna un java.io.File. Perché non puoi usare sempre, direttamente quello?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.