你好,也許你聽說過GIMP或類似使用不同幀的東西作爲一個完整的GUI,所以我想知道當兩個(也許是多個)幀加載到內存中並且可見時如何進行這種幀通信。兩個不同的JFrames之間的通信?
我已經通過一些文章,但他們不是很滿意,如果任何人有一個很好的例子或教程,然後請分享。
問候 阿洛·沙瑪
你好,也許你聽說過GIMP或類似使用不同幀的東西作爲一個完整的GUI,所以我想知道當兩個(也許是多個)幀加載到內存中並且可見時如何進行這種幀通信。兩個不同的JFrames之間的通信?
我已經通過一些文章,但他們不是很滿意,如果任何人有一個很好的例子或教程,然後請分享。
問候 阿洛·沙瑪
基本上,它只是一個具有基準幀甲在幀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
}
}
大部分時間,引入接口以分離幀(聽衆等),或者使用中介以避免所有幀之間的過多鏈接,但您應該明白。
如果在MVC類型模式中將「控制」邏輯從「視圖」邏輯中分離出來,這應該就像引用其他組件一樣簡單。
就像JFrame可能有多個面板一樣,您的應用程序可以根據單個面板中的操作對幾個面板進行更改。您的應用程序可能有多個框架可能受到單個框架中的操作的影響。
考慮在NetBeans平臺(一個Swing-bsed RCP)之上構建您的應用程序,該應用程序隨窗口系統一起提供。如果你喜歡多個窗口,你可以讓TopComponets分離。
您可以通過Lookup實例在TopComponents和Modules之間進行通信。
你的意思是框架或應用程序?相同應用程序(因此jvm)中的幀只能使用普通的Java調用:) – extraneon 2011-02-26 13:29:40
與extraneon一致,您將需要澄清您的問題。請在這裏查看關於如何改善您的問題的建議:[如何以智能方式提問](http://catb.org/~esr/faqs/smart-questions.html) – 2011-02-26 13:50:04
@ user517051:應該是指出,Gimp的用戶界面看起來有些被視爲糟糕的失敗......這是來自Linux **和** Gimp的用戶;)(是的,我討厭Gimp的用戶界面充滿激情,它根本沒有任何意義當你有很多應用程序打開) – SyntaxT3rr0r 2011-02-26 14:00:29