/ / как да извикаме jFrame на jDesktopPane без използване на JInternalFrame - java, swing, desktop-application, netbeans-7, jinternalframe

как да се обадите на jFrame на jDesktopPane без да използвате JInternalFrame - java, swing, desktop-application, netbeans-7, jinternalframe

Завърших проекта, който ми беше възложенуниверситет, но сега се опитвам да създам MDI за моя проект. Използвах 10 jFrame и една основна форма, която също е jFrame, след което добавих една лента с менюта, 10 jButton за извикване на jFrame и един jDesktopPane за място, което се обажда jFrame. По-долу кодът, използван за извикване на jFrame място в jDesktopPane във всички 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);
}
}

но не работи с мен и дава по-долу съобщение за грешка:

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

Как да направите това и да решите този въпрос, защото азне използвах никакви jInternal Frame. Мисля, че в този случай не съм в състояние да използвам jInternale Frame, защото направих цялата работа на jFrame като пълния GUI с код и отново правя цялата работа на jInternal Frame не е възможно за мен да изпратя окончателния си проект.

Отговори:

4 за отговор № 1

Ако искате да поставите Windows intp на JDesktopPane, тогава трябва да използвате JInternalFrames. Това е най-доброто ви решение дали е привлекателно за вас или не.

Урок в това е, че трябва да се стремите към товаизбягвайте да създавате класове, които разширяват компонентите на Swing, особено компонентите от най-високо ниво, като JFrames, и вместо това създавате класове, които произвеждат JPanels, компоненти, които са достатъчно гъвкави, за да бъдат поставени навсякъде, например в JFrames, JInternalFrames, JDialogs, JOptionPanes, други JPanels ..

Имайте предвид, че kludge е да получите съдържанието от панелавашето JFrame, поставете го в JInternalFrame и го поставете в JDesktopPane, или това или задайте съдържанието на JInternalPanes с това от 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);

Но отново имайте предвид, че това е kludge и носи потенциални капани.