Eccezione: aggiunta di una finestra a un contenitore. Come risolverlo?
-
29-10-2019 - |
Domanda
Ho un JDialog
Classe nominata Preferences
. Questa classe crea un costruttore come:
class Preferences extends javax.swing.JDialog {
Preferences(java.awt.Frame parent,modal) {
super(parent,modal);
//......
}
}
Nel mio programma voglio aprire questo dialogo Preferenze mentre faccio clic su un pulsante da un JFrame
modulo. Dopo aver registrato l'ascoltatore di azioni sul pulsante, ho scritto il codice all'interno come:
Frame fr = new Frame();
Preferences p = new Preferences(fr,false);
fr.add(p);
fr.setVisible(true);
Quando eseguo questo codice ricevo la seguente eccezione (mentre faccio clic sul pulsante):
Exception in thread "AWT-EventQueue-0"
java.lang.IllegalArgumentException: adding a window to a container
Cosa significa questo e come posso risolverlo?
Soluzione
Cosa significa questo..
Un contenitore di livello superiore (finestra di dialogo) non può essere aggiunto a un altro (frame).
..e come posso risolverlo?
Chiama soltanto setVisible(true)
sul Preferences
Dialog, piuttosto che aggiungerlo.
Altri suggerimenti
Non aggiungi il jdialog a JFrame, che non ha alcun senso da quando il add(...)
Il metodo è per l'aggiunta di componenti da visualizzare in il contenitore, no di Il container. Visualizza il JDIALOG dall'ActionListener di JFrame JButton. Inoltre, non dovresti miscelare i componenti AWT (frame) e i componenti swing insieme senza una buona ragione.
La tua domanda suggerisce che trarresti grande beneficio passando attraverso i tutorial di swing.
JDialog e Jframe sono contenitore di alto livello. Suggerisco che dovresti usare JFrame
, JInternalFrame
e JDesktopPane
.