Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    655

    istruzione per chiudere joptionpane

    ciao a tutti, sono alla ricerca di un'istruzione che chiuda un joptionpane.

    Il mio obiettivo è quello di lanciare la joptionpane nel frattempo che si concluda un'operazione e poi eliminarla con un'istruzione senza che l'utente debba premere alcun pulsante.

    Sapreste aiutarmi??

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

    Re: istruzione per chiudere joptionpane

    Originariamente inviato da melmar20
    ciao a tutti, sono alla ricerca di un'istruzione che chiuda un joptionpane.

    Il mio obiettivo è quello di lanciare la joptionpane nel frattempo che si concluda un'operazione e poi eliminarla con un'istruzione senza che l'utente debba premere alcun pulsante.
    Usando solo i showXXX() statici non puoi fare nulla (è tutto "nascosto" e gestito internamente). Ma JOptionPane si può anche usare in modo "diretto", istanziandolo, settando le varie proprietà, ottenendo il JDialog, mostrando la dialog, ecc... Anche se è una cosa specifica e usata in casi particolari.

    Vedi la documentazione javadoc di JOptionPane, nella sezione "Direct Use:" che mostra un esempio.
    Avendo il reference al JDialog .... beh, ci fai quello che vuoi!
    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
    Jan 2007
    Messaggi
    655
    ho seguito il tuo consiglio, ma anche con il JDialog il problema persiste.

    Ovvero non posso decidere io, da codice quando chiuderlo del tipo non posso avere una porzione di codice simile a questa :

    codice:
    if (condizione){
    chiudi JOptionPane + JDialog
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da melmar20
    ho seguito il tuo consiglio, ma anche con il JDialog il problema persiste.
    La dialog creata da createDialog() di JOptionPane per default è "modale". Quindi quando si invoca dialog.setVisible(true) si resta "bloccati" qui dentro finché la dialog non viene chiusa.

    Ed è chiaro che potrebbe anche non andarti bene .... ma io non so "quando", "dove" (come punto del codice) e a seguito di "che cosa" vuoi chiudere la dialog. Tra i miei Java Examples ho fatto un esempio di "message box" temporizzata (con un timeout). Faccio partire un javax.swing.Timer e poi rendo visibile la dialog fornita da JOptionPane. Al fire dell'evento del timer semplicemente metto la dialog non visibile. Funziona benissimo, perché ho un evento che avviene in modo "parallelo" mentre la dialog è ancora aperta (e si è bloccati nel setVisible).

    Potresti rendere la dialog non modale con il setModal() ma a questo punto la dialog non "blocca" l'input sulla finestra parente (ammesso che hai specificato il parent).
    Oppure non so .... bisogna vedere meglio.
    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
    Jan 2007
    Messaggi
    655
    Contestualizzo il tutto.

    Dalla mia applicazione lancio un'operazione sul db, quindi per non incasinarmi con thread , jscrollbar, ho pensato di far apparire una finestra che metta in attesa l'utente e una volta terminata l'operazione scompaia. Tutto qui

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da melmar20
    Dalla mia applicazione lancio un'operazione sul db, quindi per non incasinarmi con thread , jscrollbar, ho pensato di far apparire una finestra che metta in attesa l'utente e una volta terminata l'operazione scompaia. Tutto qui
    Ok ma le operazioni sul db comunque non le puoi fare nel contesto del EDT (direttamente in risposta ad un evento) ... altrimenti blocchi tutta la interfaccia utente!! Le dovrai fare in un thread separato. Quando hai finito queste operazioni chi ti vieta di usare il solito invokeLater() per far eseguire un Runnable che rende la dialog invisibile (il cui reference lo hai tenuto da qualche parte)???

    E in questo caso ... la dialog può benissimo essere "modale". Non ti interessa se si è bloccati nel setVisible(true) ... ormai a quel punto dovresti aver già avviato il thread per le operazioni.
    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
    Jan 2007
    Messaggi
    655
    esatto, la mia intenzione è proprio quella di bloccare l'interfaccia grafica. Comunque ora ci lavoro un po su e ti aggiorno

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da melmar20
    la mia intenzione è proprio quella di bloccare l'interfaccia grafica.
    Quando io ho detto ... altrimenti blocchi tutta la interfaccia utente intendevo il classico errore che molti all'inizio commettono facendo eseguire qualcosa di "lungo" nel contesto del EDT. Questo è da evitare, in quanto congela tutta la interfaccia utente. Non clicchi più nulla, non muovi più nulla, ecc...

    Se per "bloccare" intendi che la dialog essendo "modale" non permette di far arrivare l' "input" alle altre finestre della applicazione, allora ok, è un conto.
    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.