你好,也许你听说过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