Виктор Кон, vkBook, Java-Second
Классы файла Second
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);
}
}