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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top