Класс MyPro будем писать в отдельном файле. Он является таким же стандартным классом, как и первые два. Точнее это обязательная часть нашего шаблона. Но в отличие от первых двух классов, которые написаны практически полностью, этот класс можно наращивать бесконечно. Сейчас мы запишем в него только то, что нам нужно. Итак
import java.awt.*;
import java.io.*;
public class MyPro{
public static String mtit;
public static int isn;
public static String readLine(String fn, int n){
int i; String arg = " "; String ls = null; File fs = new File(fn);
if( fs.exists() ){
try{
BufferedReader ins = new BufferedReader(new FileReader(fs));
for( i=0; i < n; i++ ){ls = ins.readLine();} ins.close();
}catch(IOException ex){ex.printStackTrace();}
} if( ls != null ){arg=ls;}
return arg;
}
public static String[] split(String ls, char c){
char[] p = ls.toCharArray(); int i,i1,i2,im,n; im=p.length; n=1;
for( i=0; i < im; i++ ){if(p[i] == c){n++;}}
String[] as = new String[n]; n=0; i1=0;
for( i=0; i < im; i++ ){if(p[i] == c){i2=i-i1; as[n] = new String(p,i1,i2); i1=i+1; n++;}}
if( i1 < im ){i2=im-i1; as[n] = new String(p,i1,i2);}else{as[n] = null;}
return as;
}
public static Frame parent(){ int i,k,l;
Frame[] frm = Frame.getFrames(); k=frm.length; l=-1;
for(i=0; i < k; i++){if(frm[i].getTitle().equals(mtit)){l=i;}}
if(l != -1){return frm[l];}else{return frm[0];}
}
} |
Первая функция имеет два аргумента: строку fn с именем файла в текущей
папке программы (или полного, если в ней указан весь путь к файлу) и
номер строки внутри этого файла. Прежде всего формируется объект класса File по
имени файла. Логическая функция
| BufferedReader ins = new BufferedReader(new FileReader(fs)); |
| for( i=0; i < n; i++ ){ls = ins.readLine();} ins.close(); |
Далее - надо все таки проверить, считана строка или нет. Если она не считана, она будет null, то есть не существует. Так мы ее определили с самого начала. А если считана, то пересылаем в arg. Исходно arg задана как имеющая один пробел. Вот и все.
Вторая функция расщепляет строку по заданному символу. Сначала метод класса
String с названием
Но здесь появилась еще и третья функция, которая нам понадобится позднее.
Увы, я сам додумался до этой функции только через три года работы. Без нее тоже
все работало, но немного странно. Эта функция как раз возвращает нам наше
главное окно программы, к которому надо приклеивать диалоги, так как они не
иконизируются. Если этого не делать, то есть задавать вместо окна null, то диалоги
гуляют сами по себе, а программное окно само по себе. И если не открывать других
окон Windows, то никаких проблем не возникает. Но если открывать - то их надо тут
же закрывать. Если открыть окно программы после открытия чужого окна, то мы не увидим
в нем диалога - он не приклеен. Как это делается.
Метод возвращает объект класса Frame. Наше окно JFrame. Но это не беда, так
как JFrame является прямым потомком Frame. Статический метод
И еще два небольших замечания. У этого класса нет конструктора. Если мы его не пишем - не беда, он автоматически подставляется в пустом виде. По этой причине мы могли не писать конструктор и во втором классе. Но там он все таки написан на предмет того, что возможно мы его все таки исправим. А здесь мы с самого начала договорились ставить только статические поля и статические методы. Ну и второе, этот класс является фактически библиотекой стандартных функций, как было в старых языках. Его можно наращивать как угодно долго и добавлять другие классы такого же типа. Фактически это наш золотой фонд в чистом виде. Примеры функций можно списывать из учебников, статей и т. д., которых полно в интернете.