2 回答
TA贡献1859条经验 获得超6个赞
JFrame3在第 2 帧和第 3 帧中添加另一个类型为私有的成员,如下所示:
public class JFrame2 extends JFrame {
public JFrame2(JFrame3 frame) {
this.frame = frame;
// Now you add your listeners, you have access to the sliders of your JFrame3
...
}
private JFrame3 frame;
...
}
现在,在JFrame3类中,您需要JSliders公开所有内容,以便可以从JFrame2编译器抱怨的其他地方访问它们。
之后在JFrame1构造函数中将 的实例传递JFrame3给JFrame2像这样的构造函数:
public JFrame1 () { // Constructor
...
button.addActionListener(new ActionListener() { //when button is pressed
public void actionPerformed(ActionEvent e) {
JFrame3 obj3 = new JFrame3(); // open JFrame3
JFrame2 obj2 = new JFrame2(obj3); // open JFrame2
}
});
}
请注意,我已经改变了构造JFrames的顺序,以便我可以将 传递obj3给JFrame2
TA贡献1820条经验 获得超10个赞
你会想要成为模型-视图-控制器设计模式的农民。
您想要做的一件事是减少任何一个类的责任量。
在您的情况下,您有一个窗口显示图像,另一个窗口显示控件(尽管我会考虑使用单个窗口来显示两者,但概念保持不变)。
这两个类都没有真正负责根据输入“更改”图像,相反,这实际上应该属于另一个类 - 一个模型。
这将从“控件”窗口获取输入,修改它的状态并生成相关方可以响应的事件(也称为观察者模式)。
通过这种方式,您可以更改模型的实现,而不会对依赖它的其他类产生不利影响(这依赖于另一个概念 -接口代码而不是实现),因为它们不依赖于实现,而是定义的契约y 模型的接口。
当您建立“控件”和“图像”窗口时,您还将向它们传递“模型”的相同实例,通过此,两个窗口将能够进行通信——由合同定义的程度模型,但我想它主要是一种方式(控制视图 -> 模型 -> 图像视图)
添加回答
举报