Я завершив свій проект, який мені призначивуніверситет, але зараз я намагаюся створити 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);
Але ще раз зауважте, що це хитрість і несе потенційні пастки.