|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
15-02-2007, 01.30.23 | #1 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
[JAVA] Controllo contenuto stringhe
Sto iniziando a creare una piccola Gui che compilati 3 campi andrà poi a generare un file, scrivendo le informazioni inserite. Al momento del controllo per vedere se tutti i campi sono stati compilati c'è il problema, praticamente è come se il controllo non andasse, anche se tutti i campi non fossero riempiti il programma continuerebbe a girare senza problemi e questo è un problema visto che obbligatoriamente tutti i campi devono essere compilati. Codice:
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.*; public class InserisciDati extends JFrame { JButton bottone1; public JTextField autore; public JTextField titolo; public JTextField editore; JLabel label_autore; JLabel label_titolo; JLabel label_editore; public static void main(String[] args) { new InserisciDati(); } public InserisciDati() { this.setTitle("Inserisci i dati da salvare nel file!"); this.setLocation(250,250); this.setSize(400,150); this.setLayout(new GridLayout(4,2)); this.creaGui(); this.add(label_autore); this.add(autore); this.add(label_titolo); this.add(titolo); this.add(label_editore); this.add(editore); this.add(bottone1); this.gestioneEventi(); this.setVisible(true); } public void creaGui() { autore = new JTextField(); titolo = new JTextField(); editore = new JTextField(); label_autore = new JLabel("Nome autore: "); label_titolo = new JLabel("Titolo libro: "); label_editore = new JLabel("Casa editrice: "); bottone1 = new JButton("Scrivi sul file"); } public void gestioneEventi() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); bottone1.addActionListener(new AscoltatorePulsante()); } // Inner class public class AscoltatorePulsante implements ActionListener { public boolean controlloCampi() { boolean flag = false; String s1 = (String) autore.getText(); //if ( (autore.getText()) == "" ) if (s1 == "") flag = false; else System.out.println("Sono passato"); flag = true; return flag; } public void actionPerformed(ActionEvent e) { Object a = e.getSource(); if (a == bottone1) { boolean flag = controlloCampi(); if (flag == false) System.out.println("Errore! Uno o piu' campi non correttamente riempiti"); else System.out.println("Tutti i campi sono stati correttamente riempiti"); } } } // Fine Inner Class } Per semplicità nel metodo "controlloCampi()" ho fatto il controllo solo sull'oggetto "autore". Come potrei risolvere?? tnx! Ultima modifica di Downloader : 15-02-2007 alle ore 01.35.01 |
15-02-2007, 01.38.38 | #2 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
I controlli sull'uguaglianza di stringhe si fanno col metodo equals()
Il metodo equals() verifica l'eguaglianza del contenuto dei due oggetti String, mentre l'operatore "==" verificare l'eguaglianza dei riferimenti in memoria... e poiché compari due oggetti che non sono lo stesso oggetto (la stringa s1 e la stringa creata al volo di contenuto nullo), il risultato del confronto sarà sempre false In parole povere: Codice:
if (s1.equals("")) Codice:
if (s1.equals(new String("")) |
15-02-2007, 01.44.27 | #3 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Cosi potrebbe andrebbe bene??
Codice:
if ((autore.getText()).equals("")) |
15-02-2007, 01.44.55 | #4 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Uh ecco, oltre che arruginito sono pure addormentato!
La variabile flag ti risulterà SEMPRE true, perché le assegni il valore true indipendentemente dal controllo sull'uguaglianza fra s1 e "". In pratica ti sei dimenticato di racchiudere le due istruzioni del ramo else nelle parentesi graffe (non si fanno questi errori! ) Vabbè, abbiamo beccato due errori |
15-02-2007, 01.45.26 | #5 | |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Quota:
|
|
15-02-2007, 01.48.35 | #6 | |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Quota:
Buonanotte e grazie. |
|
15-02-2007, 01.52.57 | #7 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Non abbatterti... non so se ti è mai capitato di scrivere tipo
Codice:
if (flag = true) ... e non capire perché non funziona una mazza... Il sottoscritto l'ha fatto e non una volta sola |
15-02-2007, 01.55.33 | #8 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Scusa, ultima cosa:
come posso fare per posizionare tutti gli oggetti grafici secondo le mie necessità senza dover ricorrere ai layout predefiniti che molte volte sono limitanti?? Ad esempio se volessi posizionare due pulsanti uno sotto l'altro nella parte bassa della finestra come potrei fare?? C'è un modo di personalizzare il layout? |
15-02-2007, 02.02.35 | #9 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Mh... al volo non saprei aiutarti, una volta l'ho fatto utilizzando il layout vuoto (non mi ricordo quale sia il nome), ma ti assicuro che è una palla assurda se cominciano a esserci troppi elementi da sistemare...
Ti consiglio di provare con NetBeans, ha un gui-editor integrato che è molto carino (si chiamava Matisse), si fa tutto draggando-droppando ed è una bellezza Probabilmente anche Eclipse ha qualcosa del genere |
15-02-2007, 02.07.19 | #10 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Ok, grazie.
Ci risentiamo dopo. |
15-02-2007, 17.17.25 | #11 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Arieccomi:
Codice:
public class CreaFile extends InserisciDati { public final String NOME_DIRECTORY_FILE = "esempio_testo.txt"; public FileWriter fileWriter; String autoreCF, titoloCF, editoreCF; public CreaFile() { try { apri(); scrivi(); chiudi(); } catch (FileNotFoundException e) { System.out.println("Errore verificato su FileNotFound"); e.printStackTrace(); } catch (IOException e) { System.out.println("Errore verificato su IO"); e.printStackTrace(); }; } public void apri() throws FileNotFoundException, IOException { fileWriter = new FileWriter(NOME_DIRECTORY_FILE); } public void chiudi() throws IOException, FileNotFoundException { fileWriter.close(); } public void scrivi() throws IOException, FileNotFoundException { acquisisci(); String stringa = generaString(); fileWriter.write(stringa); } public void acquisisci() { autoreCF = esportaContenutoAutore(); titoloCF = esportaContenutoTitolo(); editoreCF = esportaContenutoEditore(); } public String generaString() { return (autoreCF + " - " + titoloCF + " - " + editoreCF + "\n"); } } Ho un problema quando vado a catturare nella funzione "acquisisci()" i valori degli oggetti "autore", "editore", "titolo" per trasformarli poi in stringhe. La compilazione va a buon fine, viene creato correttamente il file, ma al momento di andare a scriverci dentro escono fuori una valanga di errori. Giuro, ci sono rimasto Questa è la classe dalla quale eredita i 3 oggetti TextField: Codice:
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class InserisciDati extends JFrame { JButton scrivi; JButton visualizza; public JTextField autore; public JTextField titolo; public JTextField editore; JLabel label_autore; JLabel label_titolo; JLabel label_editore; public static void main(String[] args) { new InserisciDati("Inserisci i dati da salvare nel file!"); } public InserisciDati() { } public InserisciDati(String barra) { this.setTitle(barra); this.setLocation(250,250); this.setSize(400,150); this.setLayout(new GridLayout(4,2)); this.creaGui(); this.add(label_autore); this.add(autore); this.add(label_titolo); this.add(titolo); this.add(label_editore); this.add(editore); this.add(scrivi); this.add(visualizza); this.gestioneEventi(); this.setVisible(true); } public void creaGui() { autore = new JTextField(); titolo = new JTextField(); editore = new JTextField(); label_autore = new JLabel("Nome autore: "); label_titolo = new JLabel("Titolo libro: "); label_editore = new JLabel("Casa editrice: "); scrivi = new JButton("Scrivi sul file"); visualizza = new JButton("Visualizza il contenuto"); } public void gestioneEventi() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); scrivi.addActionListener(new AscoltatorePulsante()); visualizza.addActionListener(new AscoltatorePulsante()); } public String esportaContenutoAutore() { return autore.getText(); } public String esportaContenutoTitolo() { return titolo.getText(); } public String esportaContenutoEditore() { return editore.getText(); } // Inner class public class AscoltatorePulsante implements ActionListener { int conta_autore = 0; int conta_titolo = 0; int conta_editore = 0; public boolean controlloCampi() { boolean flag = false; String s1 = (String) autore.getText(); if (((autore.getText()).equals("")) || ((titolo.getText()).equals("")) || ((editore.getText()).equals(""))) flag = false; else flag = true; return flag; } public void suggerimentoCampi() { if ((autore.getText()).equals("")) autore.setText("Devi inserire un nome autore"); if ((titolo.getText()).equals("")) titolo.setText("Devi inserire il titolo del libro"); if ((editore.getText()).equals("")) editore.setText("Devi inserire l'editore del libro"); } public void actionPerformed(ActionEvent e) { Object a = e.getSource(); if (a == scrivi) { boolean flag = controlloCampi(); if (flag == false) suggerimentoCampi(); else new CreaFile(); } if (a == visualizza) new VisualizzaFile(); } } // Fine Inner Class } |
15-02-2007, 18.05.42 | #12 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Postaci gli stacktrace.
|
15-02-2007, 18.17.30 | #13 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Ultima modifica di Downloader : 15-02-2007 alle ore 18.24.33 |
15-02-2007, 18.25.38 | #14 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Controlla che quei textfield non siano null e non siano "".. sai molti metodi se la prendono male se gli arriva un null ...
Questo vale per tutte le operazioni in generale, con le stringhe in particolare... Ultima modifica di P8257 WebMaster : 15-02-2007 alle ore 18.31.01 |
15-02-2007, 19.33.15 | #15 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
No, dovrebbero essere comunque no vuoti, per funzionare il programma richiede almeno 1 carattere su ogni JTextField
|
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
[Win XP PRO SP2] Non vedo più contenuto cartella Programmi | millovanillo | Windows 7/Vista/XP/ 2003 | 0 | 07-01-2008 02.05.36 |
[XP/SP2] Controllo in corso del file System | primoair | Windows 7/Vista/XP/ 2003 | 2 | 28-02-2006 22.13.01 |
[Java] Stringhe su finestra di dialogo | Alhazred | Programmazione | 7 | 23-02-2004 12.25.29 |
controllo D:/ al boot | slivio... | Windows 7/Vista/XP/ 2003 | 2 | 21-11-2003 01.32.59 |