2011-02-26 25 views
3

你好,也許你聽說過GIMP或類似使用不同幀的東西作爲一個完整的GUI,所以我想知道當兩個(也許是多個)幀加載到內存中並且可見時如何進行這種幀通信。兩個不同的JFrames之間的通信?

我已經通過一些文章,但他們不是很滿意,如果任何人有一個很好的例子或教程,然後請分享。

問候 阿洛·沙瑪

+2

你的意思是框架或應用程序?相同應用程序(因此jvm)中的幀只能使用普通的Java調用:) – extraneon 2011-02-26 13:29:40

+0

與extraneon一致,您將需要澄清您的問題。請在這裏查看關於如何改善您的問題的建議:[如何以智能方式提問](http://catb.org/~esr/faqs/smart-questions.html) – 2011-02-26 13:50:04

+2

@ user517051:應該是指出,Gimp的用戶界面看起來有些被視爲糟糕的失敗......這是來自Linux **和** Gimp的用戶;)(是的,我討厭Gimp的用戶界面充滿激情,它根本沒有任何意義當你有很多應用程序打開) – SyntaxT3rr0r 2011-02-26 14:00:29

回答

6

基本上,它只是一個具有基準幀甲在幀B的物質,和一個參考幀的幀B:

public class FrameA extends JFrame { 
    private FrameB frameB; 

    public void setFrameB(FrameB frameB) { 
     this.frameB = frameB; 
    } 

    public void foo() { 
     // change things in this frame 
     frameB.doSomethingBecauseFrameAHasChanged(); 
    } 
} 

public class FrameB extends JFrame { 
    private FrameA frameA; 

    public void setFrameA(FrameA frameA) { 
     this.frameA = frameA; 
    } 

    public void bar() { 
     // change things in this frame 
     frameA.doSomethingBecauseFrameBHasChanged(); 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     FrameA frameA = new FrameA(); 
     FrameB frameB = new FrameB(); 
     frameA.setFrameB(frameB); 
     frameB.setFrameA(frameA); 
     // make both frames visible 
    } 
} 

大部分時間,引入接口以分離幀(聽衆等),或者使用中介以避免所有幀之間的過多鏈接,但您應該明白。

1

如果在MVC類型模式中將「控制」邏輯從「視圖」邏輯中分離出來,這應該就像引用其他組件一樣簡單。

就像JFrame可能有多個面板一樣,您的應用程序可以根據單個面板中的操作對幾個面板進行更改。您的應用程序可能有多個框架可能受到單個框架中的操作的影響。

1

考慮在NetBeans平臺(一個Swing-bsed RCP)之上構建您的應用程序,該應用程序隨窗口系統一起提供。如果你喜歡多個窗口,你可以讓TopComponets分離。

您可以通過Lookup實例在TopComponents和Modules之間進行通信。

+0

Netbeans不是多窗口的 - 它只是一個擁有自己的窗口系統的框架。並且引入一個框架以顯示給JFrames並不是真的必要我認爲:) – extraneon 2011-02-26 22:01:44

+0

如果您願意,您可以在單獨的窗口中顯示TopComponents。而且使用RCP還有許多其他優點。 – Puce 2011-02-28 11:21:15