题目:使用单例模式设计一个多文档窗口,要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个相同的子窗体。
类图
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() {
@Override
public 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运行效果图