如何跟踪以前打开的内部帧

时间:2014-05-20 21:20:55

标签: java user-interface

这是我之前问题的一种扩展,但我只是想知道在运行时它会创建一个类的多个对象(因此它基本上打开4个内部帧)并显示从不同路径打开的不同图像。所以我的问题是,如果假设4帧被打开,我将如何获得打开第2帧的路径的信息(所以当第2帧打开时我想得到它的路径(所以当某个帧被激活时)),导致每当我尝试调用getPath() - 它给了我最近打开的图像路径,但我不知道如何获取以前打开的帧的信息。

(我使用了InternalFrameActivated(),它显示了哪个帧被激活并且还提供了正确的路径,但是如果假设另一个类正在调用该类,我就不知道如何使用它。有没有人知道如何解决这个问题?

以下是我的旧问题的链接:https://stackoverflow.com/questions/23769006/how-to-get-information-from-previously-opened-internal-frame

1 个答案:

答案 0 :(得分:1)

这取决于你打开窗户的方式。您可以创建一个工厂/经理,为指定的路径创建一个窗口。

这将允许您维护查找机制,以便您可以向经理询问指定路径的窗口

更新了示例

您可以通过多种方式实现这一目标,我个人更喜欢动态可配置的方法,您与之交互的经理可以充当其他可配置的经理实施的代理。这将允许您插入满足您需求的新/不同经理,但这是一个非常复杂的解决方案。

相反,您可以使用singleton /枚举方法创建一个简单的管理器,例如......

public enum PictureWindowManager {

    INSTANCE;

    private Map<Image, List<JInternalFrame>> mapWindows;

    private PictureWindowManager(){

        mapWindows = new HashMap<>(25);

    }

    public JInternalFrame createWindowFor(Image image) {

        List<JInternalFrame> frames = mapWindows.get(image);
        if (frames == null) {
            frames = new ArrayList<>(25);
            mapWindows.put(image, frames);
        }
        JInternalFrame frame = new JInternalFrame("Picture");
        frame.add(new JScrollPane(new JLabel(new ImageIcon(image))));
        frames.add(frame);

        return frame;

    }

    public List<JInternalFrame> getFromFor(Image image) {

        JInternalFrame frame = null;
        return mapWindows.get(image);

    }
}

然后你将使用类似......

之类的东西来创建窗口
JInternalFrame frame = PictureWindowManager.INSTANCE.createWindowFor(image);

然后,当您需要时,您将使用类似的东西检索Image的窗口。

List<JInternalFrame> frames = PictureWindowManager.INSTANCE.getFromFor(image);

现在,此示例演示了为单个Image允许多个窗口的方法,您不必这样做,您可以简单地在Image之间保持一对一的关系以及JInternalFrame如果能更好地满足您的需求