/ / wie man jFrame auf jDesktopPane ohne JInternalFrame aufruft - java, swing, desktop-application, netbeans-7, jinternalframe

So rufen Sie jFrame auf jDesktopPane auf, ohne JInternalFrame zu verwenden - java, swing, desktop-application, netbeans-7, jinternalframe

Ich habe mein Projekt abgeschlossen, das mir von zugewiesen wurdeUniversität, aber jetzt versuche ich, MDI für mein Projekt zu erstellen. Ich habe 10 jFrame und ein Hauptformular verwendet, das auch jFrame ist. Danach füge ich eine Menüleiste, 10 jButtons zum Aufrufen von jFrame und ein jDesktopPane zum Aufrufen von jFrame hinzu. Der folgende Code zum Aufrufen von jFrame place in jDesktopPane in allen 10 jButton:

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try
{
asd t = new asd();
dskp.add(t);
t.setVisible(true);

}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex);
}
}

aber nicht mit mir arbeiten und geben unten Fehlermeldung:

java.lang.illegalargumentexception: adding a window to a container

Wie mache ich das und löse dieses Problem, weil ichIch glaube, ich kann jInternale Frame nicht verwenden, weil ich alle Arbeiten an jFrame ausgeführt habe, wie z. B. die vollständige GUI mit Code, und weil ich alle Arbeiten an jInternal Frame erneut ausgeführt habe, ist das für mich leider nicht möglich Zeit, um mein endgültiges Projekt einzureichen.

Antworten:

4 für die Antwort № 1

Wenn Sie Windows in einem JDesktopPane platzieren möchten, müssen Sie JInternalFrames verwenden. Dies ist die beste Lösung, unabhängig davon, ob sie Sie anspricht oder nicht.

Eine Lektion in diesem ist, dass Sie sich bemühen solltenErstellen von Klassen vermeiden, die Swing-Komponenten erweitern, vor allem Top-Level-Komponenten wie JFrames und stattdessen Klassen erstellen, die JPanels produzieren, Komponenten, die überall so angeordnet, flexibel genug sind, zu werden wie in JFrames, JInternalFrames, JDialogs, JOptionPanes, andere JPanels usw. ..

Beachten Sie, dass ein Kludge das contentPane von erhalten sollFügen Sie Ihren JFrame in einen JInternalFrame ein und fügen Sie diesen in den JDesktopPane ein, entweder in den ContentPane des JInternalPanes oder in den ContentPane des JFrame.

asd t = new asd();
JInternalFrame internalFrame = new JInternalFrame();
internalFrame.setContentPane(t.getContentPane());
internalFrame.pack();

// set the internalFrame"s location
// ...

internalFrame.setVisible(true);
dskp.add(internalFrame);

Beachten Sie jedoch erneut, dass dies ein Trick ist und potenzielle Fallen birgt.