两个不同JFrame之间的通信?

你好,也许你已经听说过GIMP或类似使用不同帧的东西作为一个完整的gui所以我想知道当两个(可能是多个)帧加载到内存中并且可见时如何进行这种帧通信。

我已经阅读了一些文章,但它们并不是那么令人满意,如果有人有一个很好的例子或教程那么请分享。

关心Alok sharma

基本上,只需要在帧B中引用帧A,并在帧A中引用帧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之间进行通信。