为了账号安全,请及时绑定邮箱和手机立即绑定

JFrames 之间的交互

JFrames 之间的交互

慕森王 2021-06-29 15:12:27
我有 3 个 JFrame,第一个打开另外两个。这两个 JFrame 然后应该相互交互。其中一个将显示一张图片,另一个有 JSlider 来更改该图片的某些值等。如何为我的 JSlider 实现一个 ActionListener 来更新另一个 JFrame 中的图片?创建其他 JFrame 的对象将调用其构造函数,但我不想再次打开该 JFrame。也许我的方法完全错误?我正在尝试做的简化版本:public class JFrame1 extends JFrame {...}    public JFrame1 () { // Constructor    ...    button.addActionListener(new ActionListener() { //when button is pressed        public void actionPerformed(ActionEvent e) {        JFrame2 obj2 = new JFrame2(); // open JFrame2        JFrame3 obj3 = new JFrame3(); // open JFrame3        }    });    }public class JFrame2 extends JFrame {...}    public JFrame2 () { //Constructor    ...    ActionListener for JSliders from JFrame3 to update values whenever they're changed??    label.setIcon(new ImageIcon (image)); //display image    }public class JFrame3 extends JFrame{...private JSlider slider1;private JSlider slider2;}    public JFrame3 () { //Constructor    ...    some JSlider settings    }
查看完整描述

2 回答

?
慕丝7291255

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


查看完整回答
反对 回复 2021-06-30
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

你会想要成为模型-视图-控制器设计模式的农民。

您想要做的一件事是减少任何一个类的责任量。

在您的情况下,您有一个窗口显示图像,另一个窗口显示控件(尽管我会考虑使用单个窗口来显示两者,但概念保持不变)。

这两个类都没有真正负责根据输入“更改”图像,相反,这实际上应该属于另一个类 - 一个模型。

这将从“控件”窗口获取输入,修改它的状态并生成相关方可以响应的事件(也称为观察者模式)。

通过这种方式,您可以更改模型的实现,而不会对依赖它的其他类产生不利影响(这依赖于另一个概念 -接口代码而不是实现),因为它们不依赖于实现,而是定义的契约y 模型的接口。

当您建立“控件”和“图像”窗口时,您还将向它们传递“模型”的相同实例,通过此,两个窗口将能够进行通信——由合同定义的程度模型,但我想它主要是一种方式(控制视图 -> 模型 -> 图像视图)


查看完整回答
反对 回复 2021-06-30
  • 2 回答
  • 0 关注
  • 209 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信