Как добавить JDesktopPane в EditorTopComponent из ExplorerTopComponent?

77
8

Я пытаюсь вызвать метод, который отображает фреймы в EditorWindow, при нажатии кнопки в ExplorerWindow.

Существует 3 модуля:

AppEditorAPI, который содержит этот интерфейс

package org.app.AppEditorAPI;

public interface Displayer {
public void Display();
}


AppEditor, который содержит EditorTopComponent

@ServiceProvider(service=Displayer.class)
public final class EditorTopComponent extends TopComponent implements Displayer{

private JDesktopPane jdpDesktop=null;
private int openFrameCount = 0;

...

protected void createFrame() {
MyInternalFrame frame = new MyInternalFrame();
frame.setVisible(true);
jdpDesktop.add(frame);
try {
frame.setSelected(true);
} catch (java.beans.PropertyVetoException e) {
}
}

class MyInternalFrame extends JInternalFrame {

int xPosition = 30, yPosition = 30;

public MyInternalFrame() {
super("IFrame #" + (++openFrameCount), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setSize(300, 300);
setLocation(xPosition / openFrameCount, yPosition / openFrameCount);
// Add some content:
add(new JLabel("hello IFrame #" + (openFrameCount)));
}

}
public void Display(){
jdpDesktop = new JDesktopPane();
createFrame(); // Create first window
createFrame(); // Create second window
createFrame(); // Create third window
//Add the JDesktop to the TopComponent
add(jdpDesktop);
}
}


И AppExplorer, который содержит ExplorerTopComponent

public final class ExplorerTopComponent extends TopComponent {

...

private void initComponents() {

B_Display = new javax.swing.JButton();

..
}

private void B_DisplayActionPerformed(java.awt.event.ActionEvent evt) {
Displayer D = Lookup.getDefault().lookup(Displayer.class);
D.Display();
}

...

}


Ниже приведены ссылки на файл zip проекта.

http://dl.free.fr/k2Z6DRLrW
http://www.fileswap.com/dl/lCeFPcUfbg/

После нескольких тестов. Я обнаружил, что я не могу изменять (добавлять, удалять или редактировать) переменные или свойства EditorTopComponent.

Как и в этом случае, эти две строки;

public void Display() {

jdpDesktop = new JDesktopPane();

...

add(jdpDesktop);

}


Не выполняются так, как должны, поэтому после выполнения редактора EditorTopComponent.jdpDesktop по-прежнему был равен нулю и не был добавлен в EditorTopComponent.

Зная, что я хочу сделать, может ли кто-нибудь помочь мне на правильном пути?

спросил(а) 2021-01-25T18:22:31+03:00 5 месяцев назад
1
Решение
77

Наконец, "заставило его работать... видеть, что происходит, когда вы избегаете читать книги: P

Я отправляю решение, если кто-то сталкивается с той же проблемой.

Как я упоминал при редактировании моего вопроса, зная, что изменения не допускаются при поиске, вы можете либо использовать переменную InstanceContent, которая может быть изменена в поиске, либо использовать WindowManager для настройки EditorTopComponent и вызвать метод Display().

Удачи

ответил(а) 2021-01-25T18:22:31+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема