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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top