使用单例模式设计一个多文档窗口(注:在Java AWT/Swing 开发中可使用 JDesktopPane 和 JInternalFrame 来实现),要求在主窗体中某个内部子窗体只能实例化 次,即只能弹出一个相同的子窗体,如图9-7 所示。
时间: 2024-10-22 22:10:10 浏览: 31
JAVA实现多文档窗体源码
4星 · 用户满意度95%
在Java AWT/Swing中,单例模式可以用来确保多文档窗口应用中只有一个特定类型的子窗体实例存在。我们可以结合`JDesktopPane`和`JInternalFrame`来创建这个功能。以下是步骤:
1. **定义单例类**:
创建一个内部框架相关的单例类,比如`UniqueSubWindow`,它将包含子窗体的实例。
```java
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
public class UniqueSubWindow {
private static UniqueSubWindow instance;
private JFrame frame;
private UniqueSubWindow() {
// 初始化子窗体,例如设置标题、关闭监听等
frame = new JFrame("唯一子窗体");
JInternalFrame internalFrame = new JInternalFrame();
// 设置内部窗体的具体内容...
frame.add(internalFrame);
}
public static synchronized UniqueSubWindow getInstance() {
if (instance == null) {
instance = new UniqueSubWindow();
}
return instance;
}
}
```
2. **在需要的地方显示子窗体**:
在主窗口或其他地方,每次需要打开子窗体时,通过`getInstance()`方法获取并显示子窗体。
```java
public void openSubWindow() {
UniqueSubWindow uniqueInstance = UniqueSubWindow.getInstance();
uniqueInstance.frame.setVisible(true);
}
```
3. **关闭监听**:
为了确保只允许打开一次,可以在关闭子窗体时将其置为`null`,防止再次显示。
```java
internalFrame.addWindowListener(event -> {
if (event.getID() == WindowEvent.WINDOW_CLOSING) {
UniqueSubWindow.instance = null; // 当窗口关闭时,清空单例
}
});
```
阅读全文