package uk.co.mmscomputing.util; import java.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.beans.*; import javax.swing.*; import uk.co.mmscomputing.util.log.LogBook; abstract public class UtilMainApp extends JApplet{ private Properties properties=new Properties(); private File propertiesFile; private JFrame frame = null; public UtilMainApp(){ super(); frame = null; } public UtilMainApp(String title, String[] argv){ JFrame.setDefaultLookAndFeelDecorated(true); frame=new JFrame(title); // frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ev) { stop();System.exit(0); } }); init(); start(); } protected boolean isApplet(){ return frame==null;} protected void setFrameSize(JFrame frame, Rectangle bounds){ frame.setSize(bounds.width*4/5,bounds.height*4/5); /* frame.pack(); int w = frame.getBounds().width; if(bounds.width<w){w=bounds.width*95/100;} int h = frame.getBounds().height; if(bounds.height<h){h=bounds.height*95/100;} frame.setSize(w,h); */ } abstract protected JPanel getCenterPanel(Properties properties)throws Exception; public void createGUI(){ try{ LogBook log=new LogBook(false); Runtime rt=Runtime.getRuntime(); System.out.println("Runtime Total Memory: "+(rt.totalMemory()/(1024*1024))+" MB"); System.out.println("Runtime Max Memory: "+(rt.maxMemory()/(1024*1024))+" MB"); String s=System.getProperty("java.home"); System.out.println("java directory: "+s); String classname=getClass().getName(); String filename =classname.substring(0,classname.lastIndexOf('.'))+".properties.txt"; String userdir=System.getProperty("user.dir"); System.out.println("current directory: "+userdir); String userhome=System.getProperty("user.home"); System.out.println("user directory: "+userhome); File parent =new File(userhome,"mmsc"); try{ parent.mkdirs(); propertiesFile=new File(parent.getAbsolutePath(),filename); }catch(Exception e){ System.out.println("9\bCould not create directory:\n\t"+parent.getAbsolutePath()+"\n\t"+e); propertiesFile=new File(filename); } System.out.println("properties file: "+propertiesFile.getAbsolutePath()); if(propertiesFile.exists()){properties.load(new FileInputStream(propertiesFile));} JTabbedPane tp=new JTabbedPane(); String mainapptitle = properties.getProperty(getClass().getName()+".mainapp.title"); if(mainapptitle==null){mainapptitle="MainApp";} JPanel centerPanel=getCenterPanel(properties); tp.addTab(mainapptitle,centerPanel); String logtitle = properties.getProperty(getClass().getName()+".log.title"); if(logtitle==null){logtitle="Log";} tp.addTab("Log",log); Container cp=this.getContentPane(); cp.setLayout(new BorderLayout()); cp.add(tp,BorderLayout.CENTER); if(frame!=null){ frame.getContentPane().add(this); GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); setFrameSize(frame,ge.getMaximumWindowBounds()); frame.setLocationRelativeTo(null); frame.setVisible(true); } }catch(Exception e){ System.out.println("9\b"+getClass().getName()+".createGUI:\n\tCould not create GUI\n\t"+e.getMessage()); e.printStackTrace(); } } public void init(){ try{ // javax.swing.SwingUtilities.invokeAndWait( javax.swing.SwingUtilities.invokeLater( new Runnable(){ public void run(){ createGUI(); } } ); }catch(Exception e){ System.out.println("9\b"+getClass().getName()+".init:\n\tCould not create GUI\n\t"+e.getMessage()); e.printStackTrace(); } } public void stop(){ try{ properties.store(new FileOutputStream(propertiesFile),propertiesFile.getAbsolutePath()); }catch(Exception e){ System.out.println("9\b"+getClass().getName()+".stop:\n\tCould not save properties\n\t"+e.getMessage()); e.printStackTrace(); } super.stop(); } }