Exception: ajout d'une fenêtre à un conteneur. Comment le résoudre?
-
29-10-2019 - |
Question
j'ai un JDialog
classe nommée Preferences
. Cette classe crée un constructeur comme:
class Preferences extends javax.swing.JDialog {
Preferences(java.awt.Frame parent,modal) {
super(parent,modal);
//......
}
}
Dans mon programme, je veux que cette boîte de dialogue de préférences s'ouvre pendant que je clique sur un bouton dans un JFrame
formulaire. Après avoir enregistré l'auditeur d'action sur le bouton, j'ai écrit le code à l'intérieur comme:
Frame fr = new Frame();
Preferences p = new Preferences(fr,false);
fr.add(p);
fr.setVisible(true);
Lorsque j'exécute ce code, je reçois l'exception suivante (comme je clique sur le bouton):
Exception in thread "AWT-EventQueue-0"
java.lang.IllegalArgumentException: adding a window to a container
Qu'est-ce que cela signifie et comment puis-je le résoudre?
La solution
Qu'est-ce que ça veut dire..
Un conteneur de niveau supérieur (boîte de dialogue) ne peut pas être ajouté à un autre (cadre).
..et comment puis-je résoudre ce problème?
Il suffit d'appeler setVisible(true)
sur le Preferences
Dialogue, plutôt que de l'ajouter.
Autres conseils
Vous n'ajoutez pas le jdialog au jframe, qui n'a aucun sens depuis le add(...)
la méthode consiste à ajouter des composants à afficher dans le conteneur, pas par le conteneur. Vous affichez le JDIALOG à partir de l'ActionListener de Jbutton du JFrame. Vous ne devriez pas non plus mélanger les composants AWT (cadre) et les composants de swing sans raison.
Votre question suggère que vous bénéficieriez grandement de passer par les tutoriels de swing.
JDialog et JFrame sont récipient de niveau supérieur. Je suggère que vous devriez avoir à utiliser JFrame
, JInternalFrame
et JDesktopPane
.