Newsgroup: it.comp.java
Titolo: finestre modali

Allora ho una classe pubblica che estende da JDialog, tale clase viene
settata a modal. In questa classe ci sono anche delle JTextArea e
queste non visualizzano più il loro testo quando sono la finestra che
le contiene è modale, a cosa devo fare attenzione?


Non si capisce molto la domanda, ma ci provo lo stesso.
A guardare i sintomi sembra che crei il tuo dialog ogni volta che
viene mostrato, il fatto che sia modale o meno non influisce. Poi se
ho capito male...anche tu ti sei impegnato a non farti capire eh ;-)


sì ora che rileggo...  :D
Ho omesso i brani di codice che netbeans crea in automatico, come puoi
vedere effettivamente il dialog viene creato ogni volta che viene
mostrato, ma il problema non è questo, in quanto se lascio
setModal(true) commentato tutto funziona bene
===========================================
package cc;
public class alerts extends javax.swing.JDialog {
    public alerts() {
        initComponents();
        //setModal(true);
    }
// ....
    // quando mi serve richiamarla: alerts.showErr();
    static void showErr(String dettagli)
    {
        alerts errore = new alerts();
        // INIZIALIZZO LE VARIABILI
        String err = "";
        String cod = "uk";
        // PRELEVO IL CODICE DI ERRORE DALLA STRINGA DETTAGLI
        if(dettagli.indexOf("ORA-")!=-1){
            int startIndex = dettagli.indexOf("ORA-");
            int endIndex = dettagli.indexOf(":");
            cod = dettagli.substring(startIndex,endIndex);
        }
        // SE IL PARAMETRO DI INGRESSO è VUOTO CREO UN MSG DI DEFAULT
        if (dettagli==null) {
            dettagli = "Nessuna informazione aggiuntiva.";
        }
            // STAMPO UN MESSAGGIO PERSONALIZZATO IN BASE AL cod
(CODICE ERRORE ORACLE)
            // SE NN SI è OTTENUTO NESSUN CODICE CREO UN MSG DI
DEFAULT   ORA-00001
            if (cod.equals("ORA-01017")) {
                err = "Credenziali di login non valide.";
            } else if (cod.equals("ORA-02291")) {
                err = "Probabilmente stai cercando di inserire valori
errati!!! \n Clicca dettagli per maggiori informazioni.";
            } else if (cod.equals("ORA-00001")) {
                err = "Non puoi inserire questo valore in quanto è già
presente nel DB.";
            } else {
                err = " Errore non classificato!!! \n Cliccare
Dettagli per avere informazioni aggiuntive.";
            }
        // RENDO QUESTO FORM VISIBILE E STAMPO I MESSAGGI
        errore.setVisible(true);
        errore.txtDettagli.setText(dettagli);
        errore.txtBox.setText(err);
    }
    private void btnOKActionPerformed(java.awt.event.ActionEvent evt)
{
        dispose();
    }
    private void formWindowOpened(java.awt.event.WindowEvent evt)
{
        setSize(460, 155);
    }
    int stato = 0;
    private void tglDettagliStateChanged(javax.swing.event.ChangeEvent
evt) {
        if (stato == 0) {
            setSize(460, 280);
            stato = 1;
        } else {
            stato = 0;
            setSize(460, 155);
        }
    }
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new alerts().setVisible(true);
            }
        });
    }
// ...

 [...]
Uhm, direi che ci sono molte "stranezze":
- i nomi delle classi sono in minuscolo, ciò può confondere chi legge
il tuo codice;
- per mostrare il dialog usi...un metodo statico! Perché? Boh..
Ah, ecco, forse ho trovato il problema: nel main() crei il dialog
"sciolto", senza che abbia un Frame "owner"; probabilmente è per
questo che manifesta dei comportamenti strani se lo imposti
modal=true.
Suggerisco di:
- correggere il nome della classe in "Alerts" !!!!
- creare un JFrame che contenga l'applicazione, o associare il dialog
ad un frame esistente;
- creare un'istanza della tua classe dialog e inizializzarla;
- quando devi mostrare un messaggio, imposti il messaggio e invochi
setVisible(true) sull'istanza.
Questo è il modo "sano" di procedere, poi non so se ti risolve il
problema ma sicuramente aiuta :)
www.megadix.it