2011-02-26 26 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