Класс fileFrame



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

public class fileFrame extends JInternalFrame implements ActionListener {
 String txt,tefi,font; int i,k,n,ok,ifs,ifk;
 short bt; char[] c; byte[] ba; String[] lab; String[] tt;
 JMenu m; JMenuItem subm; String[] name; int[] mne; int[] acc; String[] act;
 Container pcont; JTextArea txtAr; File fs; Frame parent = MyPro.parent();

 public fileFrame(String fn, int oks, int j, int[] ia){
  fs = new File(fn);
  if( fs.exists() ){ 
   setTitle(fn); setResizable(true); setSize(ia[2],ia[3]); setLocation(ia[0],ia[1]);
   setJMenuBar(createMenuBar()); ok=oks; tefi="";
   ifs=MyPro.fs; ifk=MyPro.fk;
   if( ifk < 1 || ifk > 5 ){ifk=1;} if( ifs < 8 || ifs > 20 ){ifs=14;}
   switch(ifk){
    case 1: font="Monospaced"; break;
    case 2: font="Serif"; break;
    case 3: font="SansSerif"; break;
    case 4: font="Dialog"; break;
    case 5: font="DialogInput"; break;
   }
   pcont = getContentPane(); txtAr = new JTextArea();
   txtAr.setFont(new java.awt.Font(font, java.awt.Font.PLAIN, ifs));
   n=(int)fs.length(); ba = new byte[n]; c = new char[n]; i=0; 
   try{ 
    DataInputStream din = new DataInputStream(new BufferedInputStream(new FileInputStream(fs)));
    din.readFully(ba,0,n); din.close();
   }catch(IOException ex){ex.printStackTrace();} 
   for( k=0; k < n; k++ ){bt=ba[k]; if(bt != 13){if(bt < 0){bt += 1104;} c[i]=(char)bt; i++;}}
   txt = new String(c,0,i); txtAr.setText(txt);
   txtAr.setCaretPosition(j); txtAr.setEditable(true);
   JScrollPane scrollPane = new JScrollPane(txtAr);
   pcont.add(scrollPane, BorderLayout.CENTER);
  }else{
   JOptionPane.showMessageDialog(this,"File is absent !\n"+fn,"Warning",-1);
 }}

 protected JMenuBar createMenuBar(){
  JMenuBar menub = new JMenuBar();
  //
  m = new JMenu("Edit"); m.setMnemonic(KeyEvent.VK_D);
  name = new String[]{"Find", "Font", "Exit"};
  mne = new int[]{KeyEvent.VK_F, KeyEvent.VK_O, KeyEvent.VK_X};
  acc = new int[]{KeyEvent.VK_F, KeyEvent.VK_O, KeyEvent.VK_X};
  act = new String[]{"find", "font", "exit"};
  createSubMenu(); menub.add(m);
  return menub;
 }

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

 public void actionPerformed(ActionEvent e) {
       if("find".equals(e.getActionCommand())){findop();}
  else if("font".equals(e.getActionCommand())){fontop();}
  else if("exit".equals(e.getActionCommand())){saveFile();}
 }

 private void findop(){
  int nc; String s,ss;
  lab = new String[1]; tt = new String[1];
  lab[0]="Find what:"; tt[0]=tefi;
  inpForm f = new inpForm(parent,"Find",lab,tt,1,50,0); f.show(); f.dispose();
  tt = MyPro.tt; tefi=tt[0]; if( tefi == null || !MyPro.ok ){return;}
  nc = txtAr.getCaretPosition(); 
  s = txtAr.getText();  ss=s.substring(nc);
  i=ss.indexOf(tefi); if( i > -1 ){ nc += i; }
  txtAr.setCaretPosition(nc);  
 }

 private void fontop(){
  lab = new String[1]; tt = new String[1]; int[] ia = new int[2];
  lab[0]="Select kind (1-5) and size (8-20) of font:"; tt[0]=" "+ifk+"  "+ifs;
  inpForm f = new inpForm(parent,"Font",lab,tt,1,50,0); f.show(); f.dispose();
  if( !MyPro.ok ){return;} tt=MyPro.tt; ia = MyPro.ttiarr(tt[0],2);
  ifk=ia[0]; ifs=ia[1]; MyPro.fk=ifk; MyPro.fs=ifs;
  if( ifk < 1 || ifk > 5 ){ifk=1;} if( ifs < 8 || ifs > 20 ){ifs=14;}
  switch(ifk){
   case 1: font="Monospaced"; break;
   case 2: font="Serif"; break;
   case 3: font="SansSerif"; break;
   case 4: font="Dialog"; break;
   case 5: font="DialogInput"; break;
  }
  txtAr.setFont(new java.awt.Font(font, java.awt.Font.PLAIN, ifs));
 }

 public void saveFile(){
  if( ok == 1 ){ 
   txt = txtAr.getText(); c = txt.toCharArray(); n=c.length; ba = new byte[n];
   try{
    BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(fs));
    DataOutputStream dout = new DataOutputStream(bout); 
    for( i=0; i < n; i++ ){ bt=(short)c[i];
     if( bt < 1104 && bt > 1039){bt -= 1104;} ba[i]=(byte)bt; 
    } dout.write(ba,0,n); bout.flush(); dout.close(); 
   }catch(IOException ex){ex.printStackTrace();}
  } try{ this.setClosed(true); }catch(java.beans.PropertyVetoException e){}
 }
}