Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    90

    attendere l'input dell'utente

    Sto studiando le interfacce grafiche in java da me, e non so come gestire alcuni problemi che si sono presentati.
    Il mio programma deve creare un file di configuarazione con dei dati inseriti dall'utente, quindi al primo avvio faccio comparire una finestrella in cui l'utente inserisce questi dati. Questo è il codice della chiamata

    codice:
    DataDialog d = new DataDialog();
    while (d.getData()[4].equals("0")) { } 
    dati = d.getData();
    In pratica DataDialog è la classe che crea il frame; al suo interno ho dichiarato una array di stringhe che, quando l'utente inserisce i dati, viene aggiornato in modo corretto; l'ultima cella di questo array ([4]) contiene il valore 0 se l'array è ancora vuoto, 1 se è stato aggiornato (l'utente ha pigiato OK e i dati sono stati salvati nel file di configurazione).

    Il metodo getData() semplicemente restituisce questo array.
    Ho appurato che se lascio il while vuoto ( se lascio cioè {}) si pianta tutto, non ho capito perche: devo metterci dentro qualsiasi cosa, anche un banale int i = 0; perchè vada. Mi sapete spiegare perchè?
    Inoltre questa cosa mi sembra molto dispendiosa in tutti i sensi: non è possibile effettuare un'attesa passiva, interrotta da un segnale inviato dalla classe DataDialog? Come si potrebbe fare?

    Grazie in anticipo dell'aiuto e dell'attenzione!
    Se hai paura di chiedere, vuol dire che ti vergogni ad imparare...

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

    Re: attendere l'input dell'utente

    Originariamente inviato da Eberk89
    codice:
    DataDialog d = new DataDialog();
    while (d.getData()[4].equals("0")) { }
    No, approccio sbagliato. La dialog dovresti farla "modale" in modo che un setVisible(true) sulla dialog sia "bloccante" e non ritorni finché la dialog non è stata chiusa.
    A quel punto prendi i dati che ti servono dalla tua dialog. Se poi vuoi fare una cosa del tipo:

    codice:
    DataDialog d = new DataDialog();
    String[] dati = d.inputDati();    // inputDati() farà un setVisible(true) e poi restituirà i dati
    Oppure:

    codice:
    DataDialog d = new DataDialog();
    d.mostraDialog();    // mostraDialog() farà un setVisible(true)
    String[] dati = d.getDati();
    Beh ... è solo questione del "design" che scegli.
    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
    Mar 2006
    Messaggi
    90
    giusto.
    ho modificato la classe DataDialog perchè il costruttore prepari il frame ma lo setti a setVisible(false), mentre il metodo getData() fa il setVisible(true): a questo punto però ci deve essere comunque un'attesa di risposta dell'utente!! quindi ci devo in ogni caso mettere il while?! non capisco...
    Se hai paura di chiedere, vuol dire che ti vergogni ad imparare...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Eberk89
    quindi ci devo in ogni caso mettere il while?!
    No. Nella tua dialog presumo hai messo e gestito un pulsante "OK" (e anche gestito la chiusura dalla X della dialog). Bene, quando l'utente chiede la chiusura in uno di questi modi, ti basta nell'evento relativo fare un setVisible(false) (o un dispose() se vuoi liberare anche le risorse "native" associate alla dialog).
    E a quel punto dove eri nella setVisible(true) .... esce.
    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
    Mar 2006
    Messaggi
    90
    no, c'è qualcosa che non mi quadra.
    se il mio metodo getData() è questo

    codice:
    public String getData(){
      this.setVisible(true);
      return dati;
    }
    lui fa comparire la finestra e subito dopo restituisce l'array dati che, però, è ancora assolutamente vuoto!!!

    nell'evento relativo al bottone OK, ho messo un
    ((Button)e.getSource()).getParent().setVisible(fal se);
    che effettivamente chiude la finestra... ma il return il metodo getData() l'ha già effettuato da un pezzo!!
    Se hai paura di chiedere, vuol dire che ti vergogni ad imparare...

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Hai settato la finestra come "modale"?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Eberk89
    codice:
    public String getData(){
      this.setVisible(true);
      return dati;
    }
    lui fa comparire la finestra e subito dopo restituisce l'array dati che, però, è ancora assolutamente vuoto!!!
    Se la dialog è stata creata per essere "modale", il setVisible(true) rende visibile la dialog ma non ritorna finché la dialog non è stata chiusa.
    Non "ritorna" il metodo ma tutta la gestione degli eventi e della interfaccia grafica continua normalmente perché è tutto gestito internamente al framework per il fatto che è "modale".
    E se a seguito di un qualunque evento (es. click su OK) hai fatto in modo da eseguire es. un setVisible(false) ... quel setVisible(true) in cui eri ... esce!!! E quindi hai la possibilità di prendere quello che ti serve, ammesso che hai aggiornato eventuali variabili di istanza ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    90
    ok, era il concetto di "modale" che mi mancava.
    il problema ora è che la mia finestrella era un Frame, non una Dialog! e setModal è un metodo della Dialog! e con una Dialog posso richiedere solo una stringa, non tre diverse, no? almeno così avevo capito...!
    Se hai paura di chiedere, vuol dire che ti vergogni ad imparare...

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Eberk89
    ... e con una Dialog posso richiedere solo una stringa, non tre diverse, no? almeno così avevo capito...!
    In che senso?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    90
    no mi sbagliavo e facevo una gran confusione tra JOptionPane, JDialog e Dialog.
    Beh, non riesco a venirne fuori. Ho cambiato
    public class DataDialog extends Frame
    in
    public class DataDialog extends Dialog

    ma non mi prende il costruttore super(null, "Insert data", true); !! Non riesco a capire perchèèèè
    Se hai paura di chiedere, vuol dire che ti vergogni ad imparare...

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.