Самостоятельная работа Java 30. Методические указания студентам по выполнению самостоятельнойкурсовой работы
Скачать 153.8 Kb.
|
Создание класса главной формы.В результате размещения элементов на форме мы имеем пустой каркас приложения, т.е. внешний вид полностью соответствует тому, что мы хотели, но при нажатии на кнопки ничего не происходит. Теперь требуется написать код, который будет делать все что нам требуется. Обсудим общую идею нашего приложения. Все объекты, соответствующие работникам будут создаваться при нажатии на кнопку "Новый" (JButtonNewPers) и помещаться в список. Количество элементов в списке отображается в поле JTextFieldCount. Поля текущего объекта будут отображаться в полях формы JtextFieldName, JtextFieldPosition, JtextFieldSalary и JtextFieldRating. При помощи этих же элементов мы будем присваивать значение членам класса. Т.е. все объекты хранятся в списке и при помощи текстовых полей формы мы получаем двусторонний доступ к членам текущего объекта. Текущий объект выбирается из списка при помощи счетчика JSpinnerCrn. Удаляется текущий объект из списка при нажатии на кнопку "Удалить" (JbuttonDelPers). Все методы классов (Class1, Class2) выполняются при нажатии на кнопки "Увеличить оклад" (JButtonIncSalary), "Иван в инженеры" , (JButtonPosition2Engieer) и "Увеличить оклад по рейтингу", (JButtonChngRating). Все три метода выполняются для каждого объекта из списка. Нажимаем на кнопку "Источник" в редакторе, т.е. переключаемся в режим редактирования кода. Область кода, которая была автоматически создана, будет выделена серыми областями, которые называются защитными блоками. Код в защищенных областях изменить невозможно . Редактировать код класса можно только для кода на белом фоне окна редактора. Теперь начинаем программировать: Импортировать имя класса ArrayList из пакета java.util, это значит, что мы получаем возможность обращаться к классу ArrayList напрямую. Класс ArrayList это класс представляющий список. import java.util.ArrayList; Объявляем член класса типа список. ArrayList Наш список будет иметь название personList. Название класса Class2 в угловых скобках означает, что список будет содержать объекты типа Class2 (Класс-потомок). Кроме этого объявим переменную currentInd, которая будет хранить что номер текущего объекта из списка personList (отметим, что нумерация объектов в списке начинается с 0). Программируем конструктор класса, т.е. проектируем действия, которые наша форма совершает в момент своего создания. Наш конструктор должен создать экземпляр списка personList public Example11_30JFrame() { initComponents(); personList = new ArrayList currentInd = -1; } Первая строка конструктора была создана автоматически, в этой строке вызывается функция, которая создает все элементы, расположенные на форме. Мы дописываем две строки. В первой создается экземпляр списка personList, во второй мы указываем, что номера текущего объекта из списка еще нет (ведь список еще пустой). Методы, обеспечивающие интерфейс класса «Работник» и главной формыТеперь нам потребуются два метода, которые будут осуществлять копирование данных из текущего объекта списка в поля формы и обратно. Сначала покажем метод копирования данных из объекта в поля формы, т.е. показа текущего экземпляра класса. Этот метод назван getPerson. protected void getPerson(){ if (currentInd >= 0) { jTextFieldName.setText(personList.get(currentInd).name); jTextFieldPosit.setText(personList.get(currentInd).position); jFormattedTextFieldSalary.setText("" + personList.get(currentInd).salary); jFormattedTextFieldRating.setText("" + personList.get(currentInd).rating); } } Копирование осуществляется, если в списке существует текущий объект, т.е. номер текущего объекта (currentInd) больше или равен нулю. Текущий элемент списка мы каждый раз находим при помощи строки personList.get(currentInd), т.е. при помощи метода get класса personList. Текст в текстовом поле устанавливаем при помощи метода setTex. Так как оклад и рейтинг имеют тип int, то необходимо сделать преобразование к строковому типу. Это осуществляется тем, что сначала указываем пустую строку ( ""), а потом добавляем к ней значение поля объекта в этом случае Java выполнит преобразование автоматически. Метод, который решает обратную задачу, т.е. записывает в поля текущего объекта данные из текстовых полей формы, называется setPerson: protected void setPerson(){ if ((currentInd >= 0) && (jTextFieldName.getText() != null)) { personList.get(currentInd).name = jTextFieldName.getText(); personList.get(currentInd).position = jTextFieldPosit.getText(); try { personList.get(currentInd).salary = new Integer(jFormattedTextFieldSalary.getText()); } catch (Exception e) { personList.get(currentInd).salary = 0; jFormattedTextFieldSalary.setText(null); } try { personList.get(currentInd).rating = new Integer(jFormattedTextFieldRating.getText()); } catch (Exception e) { personList.get(currentInd).rating = 0; jFormattedTextFieldRating.setText(null); } } } Копирование в текущий объект происходит, если этот объект существует, т.е. номер текущего объекта (currentInd) больше или равен нулю и если в поле «Фамилия» на форме что-то записано (jTextFieldName.getText() != null)) Преобразование строки из текстового поля в целочисленные члены класса происходит с использованием конструктора, так называемого оболочечного класса (мы используем оболочечный класс Integer). В примере была использована конструкция try-catch. Это необходимо для обработки ошибки, в случае, если строка содержит иные символы кроме чисел. |