2014-09-25 72 views
2

我一直在試圖調用ExplorerWindow中按下按鈕時在EditorWindow中顯示框架的方法。如何從ExplorerTopComponent將JDesktopPane添加到EditorTopComponent?

有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的變量或屬性。

就像在這種情況下,這兩條線;

公共無效顯示(){

jdpDesktop = new JDesktopPane(); 

...

add(jdpDesktop); 

}


不被執行,因爲他們應該,這就是爲什麼執行後,該EditorTopComponent .jdpDesktop仍等於null,未添加到EditorTopComponent。

知道我想做什麼,有人可以引導我在正確的軌道上?

+0

發佈相關代碼。 – Robert 2014-09-25 11:27:02

+0

我懷疑這樣工作,但這裏是代碼審查,請求移動(標記您的問題),祝您好運 – mKorbel 2014-09-25 11:27:49

+0

謝謝大家的快速回復。 – ADAM 2014-09-25 11:39:58

回答

0

最後,「做這工作...看到,就是當你避免讀取書籍發生了什麼:P

我張貼的解決方案如果任何人面臨同樣的問題。

正如我在編輯我的問題時所提到的,知道通過查找不允許修改,您可以使用可以在查找中修改的InstanceContent變量,或者使用WindowManager來修改EditorTopComponent並調用Display () 方法。

祝你好運

相關問題