这是我之前的问题的一种扩展,但我只是想知道假设在运行时它使一个类的多个对象(所以它基本上打开了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
的多个窗口的方法,您不必这样做,如果这样更符合您的需要,您可以简单地保持Image
和JInternalFrame
之间的一对一关系