Perciò che parola chiave posso cercare per salvare su file in modo che alla riapertura del programma rimangano le stringhe scritte antecedentemente?
Perciò che parola chiave posso cercare per salvare su file in modo che alla riapertura del programma rimangano le stringhe scritte antecedentemente?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Cosi sono riuscito a risolvere col tuo consiglio.
Con questo codice: "String filename=f.getName();" mi stampa il nime del file che cerco aggiungendomi l'estensione è possibile che mi stampi sul JTextField senza l'estensione?codice:ButtonSearch = new JButton("Search"); ButtonSearch.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(null); File f = chooser.getSelectedFile(); String filename=f.getName(); textCLIENTE.setText(filename); } });
Ho pensato di allineare e cambiare colore dei file salvati nel .doc
Come posso allineare e cambiare colore di una variabile di tipo string dentro a un ActionListener tipo questo:
"DATAora" vorrei cambiare colore e allinearla a sinistra mentre "CLIENTE" a destra.codice:ActionListener azioneListener = new ActionListener() { public void actionPerformed(ActionEvent e) { String CLIENTE = textCLIENTE.getText(); String DATAora = DateTimeFormatter.ofPattern("dd/MM/yyyy").format(localDate) + sdf.format(date); textSTAMPA.setText( CLIENTE.toUpperCase() + " " + DATAora ); } };
Grazie
Ultima modifica di desiderio; 29-12-2016 a 20:57
Dovresti testare il valore di ritorno di showOpenDialog, questo ti dice se l'utente ha "approvato" la selezione oppure se ha annullato o se c'è stato un errore.
Il pathname del file viene sempre fornito completo. Se vuoi togliere l'estensione, devi farlo tu esplicitamente. Nel framework standard non ci sono metodi per operare sulle "estensioni" dei file, perché il concetto di estensione di file dipende e varia dal sistema.
Te la cavi con poche operazioni sulle stringhe o puoi trovare metodi già fatti in librerie esterne.
JTextField/JTextArea NON supportano testo "stilizzato". Esiste solo il font/foreground/background globale del componente, come per gli altri componenti. Non puoi dare colore, formattazione, ecc.. a parti specifiche del testo in questi due componenti.
JEditorPane supporta HTML (oltre che RTF e plain-text). JTextPane estende JEditorPane, supporta testo "stilizzato" come JEditorPane ma impone alcune limitazioni (insiste sul fatto che il document implementi la interfaccia StyledDocument).
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Grazie ancora ci sono riuscito cosi a sottrarre il .doc:
Perdonami ma cosa intendevi sul "showOpenDialog" perchè non mi è molto chiaro quello che volevi spiegarmi?codice:ButtonSearch = new JButton("Search Customer"); ButtonSearch.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { JFileChooser chooser = new JFileChooser(); //trova file-------------------------------------------- chooser.showOpenDialog(null); File f = chooser.getSelectedFile(); String filename=f.getName(); String file = ".doc"; //SOTTRAE IL .DOC------------------------------------ String Testo = null; //SOTTRAE IL .DOC------------------------------------ if (filename.endsWith (file)) //SOTTRAE IL .DOC------------------------------------ Testo = filename.substring (0, filename.length()-file.length()); //SOTTRAE IL .DOC------------------------------------ textCLIENTE.setText(Testo); } });
Anche questa parte non ho capito. "(insiste sul fatto che il document implementi la interfaccia StyledDocument)"
Ho provato a salvare le proprietà e restituirle ma dove ho sbagliato? thanks
codice:class App { public void main(String[] args) { Properties prop = new Properties(); Properties prop1 = new Properties(); Properties prop2 = new Properties(); Properties prop3 = new Properties(); OutputStream output = null; try { output = new FileOutputStream("config.properties"); // Imposta il valore di proprietà prop.getProperty(textCLIENTE.getText()); prop1.getProperty(textNUM.getText()); prop2.getProperty(textMAIL.getText()); prop3.getProperty(textVIA.getText()); // Salvare le proprietà di proiettare cartella principale prop.store(output, null); prop1.store(output, null); prop2.store(output, null); prop3.store(output, null); } catch (IOException io) { io.printStackTrace(); } finally { if (output != null) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } } class App1 { public void main(String[] args) { App1 app = new App1(); app.printThemAll(); } private void printThemAll() { Properties prop = new Properties(); InputStream input = null; try { String filename = "config.properties"; input = getClass().getClassLoader().getResourceAsStream(filename); if (input == null) { System.out.println("Sorry, unable to find " + filename); return; } prop.load(input); Enumeration<?> e = prop.propertyNames(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); String value = prop.getProperty(key); System.out.println("Key : " + key + ", Value : " + value); } } catch (IOException ex) { ex.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Uhm ... non è buonissimo. Innanzitutto il concetto è che l'utente non è obbligato a scegliere un .doc, cioè tecnicamente tramite JFileChooser potrebbe scegliere qualunque altro tipo di file. Se fosse es. un .txt, il tuo endsWith dà false, quindi Testo resta a null tu setti nel textCLIENTE un null che equivale a settare vuoto ("").
Magari è proprio quello che volevi ... ma si può fare di meglio.
showOpenDialog restituisce uno di 3 valori speciali ben precisi che indicano se l'utente ha approvato, annullato o se c'è stato un errore. Andrebbe testato. Altrimenti magari l'utente annulla e tu invece prosegui con il resto che magari fallisce o schianta con una eccezione.
Domanda (che non ti ho ancora fatto finora). Riesci a leggerla (nel senso di comprenderla) la documentazione "javadoc" del framework?
Si intende questa: https://docs.oracle.com/javase/8/docs/api/
E in questo caso specifico la documentazione di JFileChooser:
https://docs.oracle.com/javase/8/doc...leChooser.html
Guarda cosa dice per il showOpenDialog. C'è anche l'esempio d'uso base all'inizio della pagina!
Lascia stare per il momento (non dovevo neanche accennarlo) .... argomento abbastanza "avanzato".
Per quello che vedo, hai conoscenze limitatissime di Swing e di Java, quindi il consiglio è semplice: procedi "per gradi" in modo molto progressivo.
Mi spiace, non hai assolutamente compreso come si usa Properties.
Una istanza ovvero 1 oggetto Properties è in grado di gestire e mantenere N associazioni chiave (String) --> valore (String).
Quindi va usata una sola istanza di Properties.
Poi le chiavi generalmente sono fisse, le stabilisce il programmatore dando dei nomi secondo certe convenzioni es. "recent.files.count", "last.inserted.name" o cose del genere.
Quello che hai scritto purtroppo è completamente insensato. Ripeto: hai conoscenze limitatissime, abituati a documentarti, leggere, leggere, leggere, leggere, studiare.
P.S. senza alcuna offesa o critica.... è quello che mi pare di vedere.
Ultima modifica di andbin; 30-12-2016 a 11:11
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
No hai perfettamente ragione, anche perchè e da circa 20 giorni in circa 3 mesi di tempo che uso Java e non conosco molte terminologie o molte logiche dietro al codice. Calcola che sono auto-didatta e a parte un pò di programmazione lineare in Pyton ne so poco, in più la programmazione a classi la stò capendo passo passo. Credevo che la programmazione fosse uguale alla teoria degli insiemi ma mi accorgo che non è proprio cosi. Però un passetto alla volta ci riuscirò dai. Per la tua domanda: alcune cose le capisco altre no dipende.
Più che altro i termini che sono scontati all'interno del vostro campo e che esprimono un intero concetto un solo singolo termine, io dovrei leggerli "srotolati" e descritti per arrivare a chiarire il tutto.
Comunque fai bene a dirmi le cose e ti ringrazio, lo vedo come un metro di giudizio per migliorare.
Una domanda ma come posso sul Properties creare allora una chiave dicendo di copiare\salvare il contenuto di un Jtextfield di nome textCLIENTE? e cosi via gli altri. Grazie.
Capisco quello che dici. Non c'è problema. Come ho già detto più volte, se hai dubbi su termini, regole, concetti, ecc... chiedi pure sul forum tranquillamente.
codice:Properties props = new Properties(); props.setProperty("testo.cliente", textCLIENTE.getText()); .... props.store( .... );
In lettura una cosa similare ma opposta: crei sempre un nuovo Properties(), fai il load() e poi usi getProperty con quelle stesse chiavi che hai stabilito per riottenere i valori dal file.
Riguardo dove posizionare il file, non va bene come avevi fatto prima che hai mescolato scrittura su file con FileOutputStream e poi lettura da una "risorsa" con getResourceAsStream.
Il principio delle risorse non va usato in questo caso perché il file deve essere aggiornato (le risorse come intese da getResourceAsStream sono da trattare come "a sola lettura").
Puoi leggere/scrivere un file nella directory "corrente" (o comunque in un percorso "relativo"). Oppure puoi rintracciare una directory "nota" come ad esempio la home directory dell'utente (su Windows qualcosa tipo C:\Users\nomeutente ) che si ottiene tramite System.getProperty("user.home"). Una applicazione può avere tipicamente una directory chiamata .xyz (punto qualcosa) lì sotto la home e dentro ci mette i suoi file di dati, configurazioni, ecc...
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ho provato a scrivere cosi con i tuoi consigli, ma ho ancora dubbi perchè non è corretto.
Le proprietà "prop" quando avvio il programma, digito sul Jtextfield "textCLIENTE" un testo a caso tipo: "ciao" e il setProperty lo salva, giusto? Poi se si quando? alla chiusura del programma?
Stessa cosa quando riapro il programma mi ritrovo sul Jtextfield "textCLIENTE" il testo "ciao"?
OutputStream output = null; Chi è? e cosa fa? perchè ha logica non dovrebbe essere Input?
ho creato "file" come variabile che detiene il file "Properties.txt" nella directory del programma e tramite getProperty mi salva i contenuti del prop. Due domande la variabile "file" dove deve andare?
La System.getProperty("user.home") ho letto che se cambi nome alla cartella del programma può creare un bug Java, allora ho pensato (nn so se erroneamente) di salvarla nel file di nome "Properties.txt". Questo è corretto? o devo scrivere "xyz.Properties.txt"?
Poi output posso toglierlo perchè cosi mi sembra inutile?
Ma perchè è nello .store, nel finally, e close();?
Nel .load ho scritto "File" immaginando che caricasse il file ma penso che dovrebbe caricarmi le proprietà per stamparle nel, in questo caso, text.CLIENTE perciò che funzione ha?
E come in alto l'input? grazie
Ti scrivo queste domande perchè non ho trovato risposte nella ricerca che ho fatto.
codice:class App { public void main(String[] args) { Properties prop = new Properties(); OutputStream output = null; try { String File = System.getProperty("Properties.txt"); prop.setProperty("testo.cliente", textCLIENTE.getText()); prop.store(output, null); } catch (IOException io) { io.printStackTrace(); } finally { if (output != null) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } } class App1 { public void main(String[] args) { App1 app = new App1(); app.printThemAll(); } private void printThemAll() { Properties prop = new Properties(); InputStream input = null; try { prop.load(new FileInputStream("File")); } catch (IOException ex) { ex.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Ultima modifica di desiderio; 31-12-2016 a 05:03