两个不同JFrame之间的通信?

时间:2011-02-26 13:22:12

标签: java swing jframe

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

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

此致 Alok sharma

4 个答案:

答案 0 :(得分:7)

基本上,只需要在帧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
    }
}

大多数情况下,引入接口来解耦帧(侦听器等),或者使用中介来避免所有帧之间的链接太多,但你应该明白这一点。

答案 1 :(得分:1)

如果要将“控制”逻辑从MVC类型模式中的“视图”逻辑中分离出来,这应该只是引用不同的组件一样简单。

就像JFrame可能有多个面板一样,您的应用程序可以根据单个面板中的操作对多个面板进行更改。您的应用程序可能有多个框架可能会受到单个框架中的操作的影响。

答案 2 :(得分:1)

考虑在NetBeans平台(Swing-bsed RCP)之上构建应用程序,该平台附带一个窗口系统。如果您喜欢多个窗口,可以将TopComponets分离。

您可以通过Lookup实例在TopComponents和Modules之间进行通信。

答案 3 :(得分:0)

我迟到了7年,但也许这对您来说仍然很有趣;) 我通过实现观察者模式解决了这个问题。

在我的示例中,有一个概览视图( UIView.animate(withDuration: 1.0, delay: 0.4, options:[ UIViewAnimationOptions.curveEaseOut , .repeat], animations: { self.logoLabel1.alpha = 0.0 self.logoLabel2.alpha = 0.0 }, completion: nil) ;数据库中的表)和一个详细视图(=observer;包含概览视图中的一行)。现在,我要在详细信息视图中编辑(在概述视图中)选定的行,单击保存按钮,关闭详细信息视图,然后=observable对(所有)观察者进行更改。

notify