Файл Second.ini



 Program Second, version 1
0|0|800|600|0|0|780|540
txt|ini|inf|par|bat|java|dat
data/Second.ini|14|3
2
File 70 Open|Continue|Image|Special|Exit 79|67|73|83|69 49|50|51|52|48
Help 72 Menu|Editor|Browser 77|69|66 53|54|55

Классы файла Second.java



import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.*;
import java.util.*;

public class Second {
 public static void main(String[] args) throws IOException {
  int k,km; String[] ml; String ls; File dir = new File(".");
  ml = dir.list(); km=ml.length;
  k=0; while( !ml[k].endsWith(".jar") ){k++;} MyPro.npro = ml[k];
  MyPro.unzipfold(MyPro.npro,"data",2);
  MyPro.mtit = MyPro.readLine("data/Second.ini",1);
  ls=MyPro.readLine("data/Second.ini",3); MyPro.ext = MyPro.split(ls,'|');
  ls=MyPro.readLine("data/Second.ini",4); ml = MyPro.split(ls,'|');
  MyPro.fn=ml[0]; MyPro.fs=Integer.parseInt(ml[1]); MyPro.fk=Integer.parseInt(ml[2]);
  MyPro.init();
  MainForm mf = new MainForm(); mf.make();
  mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  final String plaf = "javax.swing.plaf.metal.MetalLookAndFeel";
  try{ UIManager.setLookAndFeel(plaf); SwingUtilities.updateComponentTreeUI(mf); }
  catch(Exception e){e.printStackTrace();}
  mf.setVisible(true);
}}


class MainForm extends JFrame implements ActionListener {
 public static JDesktopPane deskt;
 int i,j,k,km,l,lm,nt; int[] ia = new int[8];
 String fn,ls; JMenu menu; JMenuItem submenu;
 String[] name; int[] mne; int[] acc; String[] act;
 String[] actt = new String[200];

 public MainForm(){}

 public void make() throws IOException {
  fn="data/icon.png"; setIconImage(new ImageIcon(fn).getImage());
  setTitle(MyPro.mtit);
  Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
  km=scrSize.width; lm=scrSize.height-25;
  ls=MyPro.readLine("data/Second.ini",2); act = MyPro.split(ls,'|');
  for(i=0; i < 8; i++){ia[i]=Integer.parseInt(act[i]);} 
  for(i=0; i < 4; i++){MyPro.ia[i]=ia[i+4];} i=ia[0]; j=ia[1]; k=ia[2]; l=ia[3];
  i += (km-k)/2; j += (lm-l)/2; if(i < 0){i=0;} if(j < 0){j=0;} if(i > km-k){i=km-k;} if(j > lm-l){j=lm-l;}
  setBounds(i,j,k,l); 
  deskt = new JDesktopPane(); setContentPane(deskt); 
  deskt.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
  setJMenuBar(createMenuBar());
 }

 protected JMenuBar createMenuBar() {
  JMenuBar menub = new JMenuBar(); StringTokenizer t; String mname;
  int ik,im,isb,nl,nm,nsb;
  nl=5; ls=MyPro.readLine("data/Second.ini",nl); t = new StringTokenizer(ls);
  nm=Integer.parseInt(t.nextToken()); nt=0;
  for(im=0; im < nm; im++){
   nl++; ls=MyPro.readLine("data/Second.ini",nl); t = new StringTokenizer(ls);
   mname=t.nextToken(); ik=Integer.parseInt(t.nextToken()); menu = new JMenu(mname); menu.setMnemonic(ik);
   ls=t.nextToken(); name = MyPro.split(ls,'|');
   nsb=name.length; mne = new int[nsb]; acc = new int[nsb];
   ls=t.nextToken(); act = MyPro.split(ls,'|');
   for(isb=0; isb < nsb; isb++){mne[isb]=Integer.parseInt(act[isb]);}
   ls=t.nextToken(); act = MyPro.split(ls,'|');
   for(isb=0; isb < nsb; isb++){acc[isb]=Integer.parseInt(act[isb]); act[isb]="ac"+nt; actt[nt]=act[isb]; nt++;}
   createSubMenu(); menub.add(menu); 
  }
  menu = new JMenu("About"); menu.setMnemonic(KeyEvent.VK_A);
  name = new String[]{"About Program","About Author"};
  mne = new int[]{KeyEvent.VK_P, KeyEvent.VK_A};
  acc = new int[]{KeyEvent.VK_F1, KeyEvent.VK_F2};
  act = new String[]{"pppp", "llll"};
  createSubMenu(); menub.add(menu);
  return menub;
 }

 protected void createSubMenu(){
  for( i=0; i < act.length; i++ ){
   submenu = new JMenuItem(name[i]);  submenu.setMnemonic(mne[i]);
   submenu.setAccelerator(KeyStroke.getKeyStroke(acc[i], ActionEvent.ALT_MASK));
   submenu.setActionCommand(act[i]); submenu.addActionListener(this);
   menu.add(submenu);
 }}

 public void actionPerformed(ActionEvent e){
  for(i=0; i < nt; i++){
   if( actt[i].equals(e.getActionCommand()) ){MyPro.isn=i+1; execPro();}
  }
  if( "pppp".equals(e.getActionCommand()) ){addAbout(1);}
  if( "llll".equals(e.getActionCommand()) ){addAbout(2);}
 }

 private void execPro(){
  Thread tr = new Thread(new runPro()); tr.start();
 }

 private void addAbout(int n){
  String mess; mess=" ";
  switch(n){
   case 1:
    mess =
    "\n Программа-учебник Second знакомит читателя с методами:  "+
    "\n (а) написания программы в виде одного саморазворачивающегося   "+
    "\n файла-архива, (б) программы поиска файла сканированием      "+
    "\n файловой структуры, (в) запуска различных приложений по   "+
    "\n расширению файлов типа редактора текстов или браузера "+
    "\n html-файлов, (г) поиска файлов по заданному расширению,"+
    "\n (д) выбора и показа картинок в режиме предпросмотра."+
    "\n  ";
   break;  
   case 2: 
    mess =
    "\n Автор проекта - Виктор Кон (Курчатовский Институт, Россия)    "+
    "\n Проект фактически показывает и подробно объясняет некоторые   "+
    "\n элементы программы vkACL.jar - интерпретатора нового и простого  "+
    "\n языка программирования ACL и среды разработки ACL программ.  "+
    "\n Вэб-сайт программы \"http://vkacl.narod.ru\" "+
    "\n  ";
   break;
  }
  JOptionPane.showMessageDialog(this, mess, "About", JOptionPane.INFORMATION_MESSAGE);
 }
}