Класс 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. Статический метод
И еще два небольших замечания. У этого класса нет конструктора. Если мы его не пишем - не беда, он автоматически подставляется в пустом виде. По этой причине мы могли не писать конструктор и во втором классе. Но там он все таки написан на предмет того, что возможно мы его все таки исправим. А здесь мы с самого начала договорились ставить только статические поля и статические методы. Ну и второе, этот класс является фактически библиотекой стандартных функций, как было в старых языках. Его можно наращивать как угодно долго и добавлять другие классы такого же типа. Фактически это наш золотой фонд в чистом виде. Примеры функций можно списывать из учебников, статей и т. д., которых полно в интернете.