Завърших проекта, който ми беше възложенуниверситет, но сега се опитвам да създам 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 и носи потенциални капани.