2013-04-03 3 views
3

Этот фрагмент кода я получил от https://stackoverflow.com/a/6868039/2240900Добавить JInternalFrame в JDesktopPane с помощью кнопки в другой JInternalFrame

как добавить internal2 к desktoppane1 с помощью кнопки размещены где-то в internal1.

В ActionListener добавлены к кнопке вы можете использовать код как следующий, чтобы получить ссылку на рабочую панель:

Container container = SwingUtilities.getAncestorOfClass(JDesktopPane.class, (Component)event.getSource()); 

if (container != null) 
{ 
    JDesktopPane desktop = (JDesktopPane)container; 
    JInternalFrame frame = new JInternalFrame(...); 
    desktop.add(frame); 
} 

Мой вопрос заключается в том, чтобы добавить еще один JInternalFrame если кнопка находиться в другом JInternalFrame? ex: добавьте innerX в desktoppane1, используя кнопку, помещенную где-то в inner2/internal3/internalX, где каждая внутренняя часть была создана с помощью кнопки внутри innerX, не использующей строку меню.

Любая помощь будет оценена по достоинству. Благодарю.

ответ

2

Я случайно узнал, что мы можем использовать метод JInternalFrame, который является getDesktopPane(). Как упоминается в Javadoc:

getDesktopPane 

    public JDesktopPane getDesktopPane() 

Convenience method that searches the ancestor hierarchy for a JDesktop instance. If JInternalFrame finds none, the desktopIcon tree is searched. 

Returns: 
    the JDesktopPane this internal frame belongs to, or null if none is found 

Таким образом, мы можем просто использовать команду типа:

JDesktopPane desktopPane = internalFrame.getDesktopPane(); 
desktopPane.add(internalX); 

или если класс расширяет JInternalFrame просто использовать

JDesktopPane desktopPane = this.getDesktopPane(); 
desktoppane.add(internalX); 

, чтобы получить JDesktopPane добавить другой JInternalFrame во вложенном JInternalFrame.

0

Внешнее прослушивание в свой класс, с соответствующими параметрами, если необходимо. Затем вы можете создавать экземпляр этого слушателя каждый раз, когда вы создаете новый фрейм и применяете его к своей кнопке.

+0

Почему мне нужно экстернализовать слушателя, а какой Лисстер вы имеете в виду? Мне нужно только добавить innerX в desktoppane1, показывая, что он отображается как окно внутри моего приложения, а не как окно вне моего приложения. – user2240900

+0

Тогда я не понимаю вашу проблему. Покажите нам код (полный SSCCE), который работает для одного кадра, и покажите нам, почему он не работает для большего количества кадров. – splungebob

Смежные вопросы