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



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

(我使用InternalFrameActivated(),并显示哪一帧被激活,也给出了正确的路径,但我不知道如何使用它,如果假设另一个类正在调用该类)。有人知道该怎么做吗?

这里有一个链接到我以前的问题:https://stackoverflow.com/questions/23769006/how-to-get-information-from-previously-opened-internal-frame

这取决于你如何打开窗户。您可以创建一个工厂/管理器,它将为指定的路径创建一个窗口。

这将允许您维护查找机制,以便您可以向管理器询问指定路径

的窗口。

以示例

更新

有很多方法可以实现这一点,我个人更喜欢动态可配置的方法,在这种方法中,您与之接口的管理器充当管理器的其他可配置实现的代理。这将允许您插入新的/不同的管理器,以满足您的需求,但这是一个相当复杂的解决方案。

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

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的多个窗口的方法,您不必这样做,如果这样更符合您的需要,您可以简单地保持ImageJInternalFrame之间的一对一关系

相关内容

  • 没有找到相关文章

最新更新