/ / як викликати jFrame на jDesktopPane без використання JInternalFrame - java, swing, настільний додаток, netbeans-7, jinternalframe

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

Я завершив свій проект, який мені призначивуніверситет, але зараз я намагаюся створити MDI для свого проекту. Я використав 10 jFrame та одну основну форму, яка також є jFrame, після чого я додаю одну панель меню, 10 jButtons для виклику 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, такими як повний графічний інтерфейс з кодом і виконуючи всю роботу над jInternal Frame, для мене це неможливо. часу, щоб подати свій остаточний проект.

Відповіді:

4 для відповіді № 1

Якщо ви бажаєте розмістити Windows intp JDesktopPane, тоді вам потрібно використовувати JInternalFrames. Це ваше найкраще рішення, привабливе воно вам чи ні.

Урок цього полягає в тому, до чого слід прагнутиуникайте створення класів, що розширюють компоненти Swing, особливо компонентів верхнього рівня, таких як JFrames, а замість цього створюйте класи, які створюють JPanel, компоненти, які є досить гнучкими для розміщення в будь-якому місці, наприклад, у JFrames, JInternalFrames, JDialogs, JOptionPanes, інші JPanel тощо. ..

Зауважте, що помилка полягає у тому, щоб отримати contentPaneваш JFrame, вставте його в JInternalFrame і вставте його в JDesktopPane, або це, або встановіть вміст JPanePanes в вмісті JPrane з тим, що в 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);

Але ще раз зауважте, що це хитрість і несе потенційні пастки.