Newsgroup: it.comp.java
Titolo: Accidenti alle Dialog!!

Ciao,
mi chiamo Cristiana e ho un problema con la classe Dialog del package awt di
Java.
Passando come argomento "true" al parametro boolean cha il costruttore
Dialog richiede, non solo si blocca il Frame parent ( e fin qui tutto OK),
ma si bloccano anche gli input alla Dialog stessa ( ad esempio non risponde
all'evento di pressione di un tasto).
Viceversa, passandogli "false", la Dialog funziona bene, ma non e' piu'
bloccante per il Frame parent e quindi non so che farmene!
Faccio presente che questo problema si manifesta sia in ambiente Windows che
Unix e dunque non e' un problema di piattaforma come pensavo inizialmente.
Avete delle soluzioni da propormi?
Grazie in anticipo.
Cristiana











Avete delle soluzioni da propormi?
Anzitutto cerchiamo di capire esattamente il tuo problema.  Ecco
un semplice esempio che mostra il funzionamento dei dialoghi
modali, scritto per funzionare, sia come application, sia come
applet; l'ho compilato sia con il JDK Sun 1.1.6, sia con Microsoft
SDK 3.0 beta, e l'ho testato, in entrambe le versioni compilate,
sia come application, sia come applet in entrambi gli ambienti,
sia infine come applet con Internet Explorer 4 (la versione che
viene con Windows 98), il tutto sotto Windows 98.  Tutte e 8 le
combinazioni hanno funzionato alla perfezione.  Provalo e dicci
in quali casi hai problemi... o, se questo programmillo non ti da`
problemi in nessun caso, cerca di fargli le modifiche minime per
riprodurre i problemi che hai osservato tu.  Quando riprodurrai
il problema sara` importante che tu ci spieghi come compili e
come fai girare l'applicazione, o applet che sia; i vari release di
compilatori e macchine virtuali, sia stand-alone sia integrate nei
browser, possono presentare diversi difetti e bug, per cui e`
importante sapere esattamente in che ambienti un bug (se tale
e`) si presenta ("Java -- write once, debug everywhere"!-).
Ecco dunque l'esempietto Dialoghiamo.java:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
class MyDialog extends Dialog {
    Button theButton;
    class Clicked implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            setVisible(false);
        }
    }
    MyDialog(Frame parent) {
        super(parent, "Un dialogo", true);
        theButton = new Button("Basta, per ora");
        theButton.addActionListener(new Clicked());
        add(theButton,BorderLayout.CENTER);
        validate();
    }
}
class DialogFrame extends Frame {
    Button theButton;
    Dialog theDialog;
    boolean isApplet;
    class Clicked implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            theDialog.setVisible(true);
        }
    }
    class Closer extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            if(isApplet) dispose();
            else System.exit(0);
        }
    }
    DialogFrame(boolean isApplet) {
        super("Dialoghiamo...?");
        this.isApplet = isApplet;
        theButton = new Button("Dialoghiamo!");
        theButton.addActionListener(new Clicked());
        add(theButton,BorderLayout.CENTER);
        theDialog = new MyDialog(this);
        if(isApplet) theDialog.setSize(150,200);
        else theDialog.setSize(120,80);
        theDialog.setLocation(200,200);
        addWindowListener(new Closer());
        validate();
    }
}
public class Dialoghiamo extends Applet {
    Button theButton;
    static void startIt(boolean isApplet) {
        DialogFrame theFrame = new DialogFrame(isApplet);
        if(isApplet) theFrame.setSize(180,200);
        else theFrame.setSize(150,80);
        theFrame.setLocation(100,100);
        theFrame.setVisible(true);
    }
    class Clicked implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            startIt(true);
        }
    }
    public void init() {
        theButton = new Button("Inizia");
        theButton.addActionListener(new Clicked());
        add(theButton,BorderLayout.CENTER);
        validate();
    }
    public static void main(String[] args) {
        startIt(false);
    }
}
Facci sapere...!
Alex


Mah. le dialog modali sono sembre state poco funzionanti, sin dalla
prima release di Java e persino nel JDK 1.1.5 avevano ancora qualche
problema...
Comunque, non sarebbe male avere alcune ulteriore info:
1. Che versione del JDK stai utilizzando?
2. Puoi postare un esempio compilabile del codice che non funziona?
Ciao,
| --
| Bruno Bossola
| Groupware/Intranet B.U.           Phone:  +39-11-2252211
| ATOS SpA v.Vaninetti 27           Fax:    +39-11-2203182
| I-10148 Torino ITALY              Change NOSPAM in atos to email me!

Utilizzo il JDK 1.1.6, ma comunque il problema l'ho riscontrato anche con
delle versioni precedenti.
Adesso non posso mandarti il codice, ma grazie dell'interessamento).
CIAO
Cristiana