如何从ExplorerTopComponent向EditorTopComponent添加JDesktopPane?

时间:2014-09-25 11:22:30

标签: java swing netbeans frame netbeans-platform

当我在ExplorerWindow中按下按钮时,我一直试图调用一个在EditorWindow中显示帧的方法。

共有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仍然等于null并且没有添加到EditorTopComponent中。

知道我想做什么,有人可以指导我走上正确的轨道吗?

1 个答案:

答案 0 :(得分:0)

最后,'让它发挥作用......看看当你不读书时会发生什么:P

如果有人面临同样的问题,我会发布解决方案。

正如我在编辑问题时所提到的,知道通过查找不允许修改,您可以使用可在查找中修改的InstanceContent变量,或者使用WindowManager来设置EditorTopComponent并调用Display(方法。

祝你好运