JFrames 之间的交互

我有 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

    }


慕森王
浏览 210回答 2
2回答

慕丝7291255

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

拉莫斯之舞

你会想要成为模型-视图-控制器设计模式的农民。您想要做的一件事是减少任何一个类的责任量。在您的情况下,您有一个窗口显示图像,另一个窗口显示控件(尽管我会考虑使用单个窗口来显示两者,但概念保持不变)。这两个类都没有真正负责根据输入“更改”图像,相反,这实际上应该属于另一个类 - 一个模型。这将从“控件”窗口获取输入,修改它的状态并生成相关方可以响应的事件(也称为观察者模式)。通过这种方式,您可以更改模型的实现,而不会对依赖它的其他类产生不利影响(这依赖于另一个概念 -接口代码而不是实现),因为它们不依赖于实现,而是定义的契约y 模型的接口。当您建立“控件”和“图像”窗口时,您还将向它们传递“模型”的相同实例,通过此,两个窗口将能够进行通信——由合同定义的程度模型,但我想它主要是一种方式(控制视图 -> 模型 -> 图像视图)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java