创建型模式之单例模式(多文档窗口)

来源:互联网 发布:广联达结算软件5.0 编辑:程序博客网 时间:2024/06/05 02:01

题目:使用单例模式设计一个多文档窗口,要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个相同的子窗体。

类图


package cn.factory5;import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JDesktopPane;import javax.swing.JFrame;import javax.swing.JInternalFrame;import javax.swing.JTextArea;public class JInternalFrameDemo extends JFrame implements ActionListener {private static JInternalFrame1 internalFrame;Container contentPane = this.getContentPane();public JInternalFrameDemo(){super("主窗体");contentPane.setLayout(new BorderLayout());JButton button = new JButton("创建一个子窗体");button.addActionListener(this);contentPane.add(button, BorderLayout.SOUTH);this.setSize(new Dimension(300, 300));this.setVisible(true);this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}public void actionPerformed(ActionEvent e) {internalFrame = JInternalFrame1.getJInternalFrame1("子窗体", true, true, true, true);internalFrame.setSize(new Dimension(200, 200));internalFrame.setVisible(true);JDesktopPane desktopPane = new JDesktopPane();contentPane.add(desktopPane);desktopPane.add(internalFrame);try {internalFrame.setSelected(true);} catch (java.beans.PropertyVetoException ex) {System.out.println("Exception while selecting");}}}
package cn.factory5;import javax.swing.JInternalFrame;public class JInternalFrame1 extends JInternalFrame{private static JInternalFrame1 JIF1 = null;private JInternalFrame1(String name, boolean b1, boolean b2, boolean b3, boolean b4){super(name, b1, b2, b3, b4);}public static JInternalFrame1 getJInternalFrame1(String name, boolean b1, boolean b2, boolean b3, boolean b4){if(JIF1 == null)JIF1 = new JInternalFrame1(name, b1, b2, b3, b4);return JIF1;}}
package cn.factory5;public class Client {public static void main(String args[]){ new JInternalFrameDemo();}}

Eclipse运行效果图



0 0