} else if (formattedTxtGradeBook.getText().isBlank() && (!txtSurname.getText().isBlank()
&& !txtFirstName.getText().isBlank() && !txtSecondName.getText().isBlank())
&& formattedTxtBirthDate.getText().isBlank()) {
return 2;
} else if (formattedTxtGradeBook.getText().isBlank() && txtSurname.getText().isBlank()
&& txtFirstName.getText().isBlank() && txtSecondName.getText().isBlank()
&& !formattedTxtBirthDate.getText().isBlank()) {
return 3;
} else {
return 4;
}
}
/*
* Очищает список студентов
*/
public void clear() {
String message = "Список студентов очищен.";
list.clear();
drawTable(list, columnNames);
txtAreaPrompt.setText(message);
}
/**
* Перерисовать таблицу на форме
*
* @param list список для модели таблицы
* @param columnNames наименование колонок для модели таблицы
*/
public void drawTable(StudentList list, String[] columnNames) {
if (table != null) {
scrollPane.remove(table);
}
tableModel = new StudentListTableModel(list, columnNames);
((AbstractTableModel) tableModel).addTableModelListener(this);
table = new JTable(tableModel);
scrollPane.setViewportView(table);
}
@Override
public void tableChanged(TableModelEvent e) {
// Для работы перерисовки таблицы со списком студентов
}
/**
* Произвести экспорт в файл, указанный пользователем в диалоговом окне
*/
public void exportToFile() {
String message = "";
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Укажите txt файл для сохранения");
int userSelection = fileChooser.showSaveDialog(this);
if (userSelection == JFileChooser.APPROVE_OPTION) {
File fileToSave = fileChooser.getSelectedFile();
try {
list.saveToFile(fileToSave);
message = "Список студентов сохранен в файл " + fileToSave.getAbsolutePath();
} catch (IOException e) {
message = "Ошибка при попытке сохранения в файл (" + e.getMessage()
+ "). Укажите txt файл для сохранения списка студентов.";
}
txtAreaPrompt.setText(message);
}
}
/**
* Произвести импорт списка из файла, указанного пользователем в диалоговом окне
*/
public void importFromFile() {
String message = "";
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Укажите txt файл для импорта");
int userSelection = fileChooser.showSaveDialog(this);
if (userSelection == JFileChooser.APPROVE_OPTION) {
File fileToImportFrom = fileChooser.getSelectedFile();
try {
list = list.readFromFile(fileToImportFrom);
message = "Список студентов загружен из файла " + fileToImportFrom.getAbsolutePath();
} catch (IOException e) {
message = "Ошибка при попытке загрузки списка из файла (" + e.getMessage()
+ "). Укажите txt файл для импорта списка студентов.";
}
txtAreaPrompt.setText(message);
}
drawTable(list, columnNames);
}
public static void main(String[] args) {
StudentListApp app = new StudentListApp();
app.setPreferredSize(new Dimension(700, 500));
app.pack();
app.setVisible(true);
}
}
Файл «StudentListInterface.java»
public interface StudentListInterface {
int size();
//Операции изменения списка
/**
* Добавляет указанный элемент в конец списка.
* <p>Ограничения на добавляемые элементы:
* В список нельзя добавлять пустые ({@code null}) элементы.
* <b>В список нельзя добавлять элементы с одинаковым номером
* зачетной книжки</b>.
*
* @param e элемент для добавления в список
* @return {@code true}, если список изменился в результате вызова.
* @throws NullPointerException, если добавляемый элемент пустой
* ({@code null})
* @throws IllegalArgumentException, если добавляемый элемент не
* может быть добавлен из-за совпадения номера зачетной книжки.
* @throws NullPointerException, если указанный элемент пустой
*/
boolean add(Student e);
/**
* Удаляет первое вхождение указанного элемента их списка, если
* такой элемент в списке есть. Если такого элемента в списке нет,
* список не меняется.
* Возвращает {@code true}, если список содержал указанный элемент
* (то есть, этот список был изменен вызовом этого метода).
* @param o элемент, который будет удален, если он имеется в списке
* @return {@code true}, если список содержал указанный элемент
* @throws ClassCastExceptio, если тип добавляемого элемента не соответсвует
* содержимому списка
* @throws NullPointerException, если указанный элемент пустой
*/
boolean remove(Object o);
//Операции массового изменения списка
/**
* Удаляет все элементы из списка. Список будет пустым после
* выполнения этого метода.
*/
void clear();
//Операции доступа к элементам
//Обычные операции доступа к элементам, типа получения элемента по его индексу,
//не нужны в рамках данной работы
//Операции поиска и фильтрации
//Обычные операции поиска и фильтрации, типа получения индекса элемента,
//итераторов и представлений не нужны в рамках данной работы
}
Файл «StudentListTableModel.java»
import javax.swing.table.AbstractTableModel;
public class StudentListTableModel extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
private String[] columnNames;
private StudentList data;
public StudentListTableModel(StudentList data, String[] columnNames) {
super();
this.columnNames = columnNames;
this.data = data;
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data.get(rowIndex).getColumnsArray()[columnIndex];
}
}