这是我之前问题的一种扩展,但我只是想知道在运行时它会创建一个类的多个对象(因此它基本上打开4个内部帧)并显示从不同路径打开的不同图像。所以我的问题是,如果假设4帧被打开,我将如何获得打开第2帧的路径的信息(所以当第2帧打开时我想得到它的路径(所以当某个帧被激活时)),导致每当我尝试调用getPath() - 它给了我最近打开的图像路径,但我不知道如何获取以前打开的帧的信息。
(我使用了InternalFrameActivated(),它显示了哪个帧被激活并且还提供了正确的路径,但是如果假设另一个类正在调用该类,我就不知道如何使用它。有没有人知道如何解决这个问题?
以下是我的旧问题的链接:https://stackoverflow.com/questions/23769006/how-to-get-information-from-previously-opened-internal-frame
答案 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
如果能更好地满足您的需求