Всем доброго времени суток!
Имеется приложение "Телефонная книга" на JavaFX. Оно состоит из двух форм(Stage).
На первой таблица и три кнопки: добавить, изменить, удалить. В таблице хранятся объекты типа Person с двумя полями: fio и phone. Вторая для ввода или изменения данных из таблицы, содержит две кнопки "Сохранить" и "Отмена".
Формы: mainPane.fxml, addPane.fxml. Два контроллера (классы с обработчиками событий) к ним: MainPaneController.java и AddPaneController.java соответственно.
Контроллер для главного окна выглядит следующим образом:
public class MainPaneController {
....
private AddPaneController addPaneController;
//Коллекция объектов Person - записей телефонной книги
private CollectionAddressBook addressBookImpl = new CollectionAddressBook();
...
@FXML
private void initialize(){
...
addPaneController = fxmlLoader.getController();
addressBookImpl.fillPersonList();
}
...
@FXML
private void actionButtonPressed(ActionEvent actionEvent){
Object source = actionEvent.getSource();
if (!(source instanceof Button)) return;
Button clickedButton = (Button) source;
try {
switch (clickedButton.getId()){
case "btnAdd":
addPaneController.setPerson(new Person());
showDialog(TypeDialog.ADD);
addressBookImpl.add(addPaneController.getPerson());
break;
case "btnEdit":
Person selectedPerson = (Person)tableAddresBook.getSelectionModel().getSelectedItem();
addPaneController.setPerson(selectedPerson);
showDialog(TypeDialog.UPDATE);
break;
case "btnDelete": break;
}
}
catch (EmptyPersonException e){}
catch (NullPersonException e){
DialogManager.showErrorDialog(e.getMessage());
}
}
...
private void showDialog(TypeDialog typeDialog) {
// Отображает форму addPane.fxml
}
}
Класс контроллера для окна добавления/изменения записей в таблице:
public class AddPaneController {
private Person person;
@FXML
private TextField txtFIO, txtPhone;
public void setPerson(Person person) throws NullPersonException {
if (person == null)
throw new NullPersonException();
this.person = person;
txtFIO.setText(person.getFio());
txtPhone.setText(person.getPhone());
}
public Person getPerson(){
return person;
}
//region LISTENERS
//для кнопки "Отмена"
@FXML
public void actionClose(ActionEvent actionEvent){
Node source = (Node)actionEvent.getSource();
Stage stage = (Stage)source.getScene().getWindow();
stage.hide();
}
//для кнопки "Сохранить"
@FXML
public void actionSave(ActionEvent actionEvent) {
try {
person.setFio(txtFIO.getText());
person.setPhone(txtPhone.getText());
actionClose(actionEvent);
}
catch (EmptyPersonException e){
DialogManager.showErrorDialog(e.getMessage());
}
}
//endregion
}
Класс Person:
public class Person {
private SimpleStringProperty fio = new SimpleStringProperty("");
private SimpleStringProperty phone = new SimpleStringProperty("");
public Person(){}
public Person(String fio, String phone) {
this.fio.set(fio);
this.phone.set(phone);
}
public String getFio() {
return fio.get();
}
public String getPhone() { return phone.get(); }
public void setFio(String fio) throws EmptyPersonException {
if (fio.length() == 0)
throw new EmptyPersonException();
this.fio.set(fio);
}
public void setPhone(String phone) throws EmptyPersonException{
if (phone.length() == 0)
throw new EmptyPersonException();
this.phone.set(phone);
}
}
Класс CollectionAddressBook:
public class CollectionAddressBook implements IAddressBook {
private ObservableList<Person> personList = FXCollections.observableArrayList();
@Override
public void add(Person person) throws EmptyPersonException {
if (person.getFio().length() == 0 || person.getPhone().length() == 0)
throw new EmptyPersonException();
personList.add(person);
}
...
public ObservableList<Person> getPersonList(){ return personList;}
public void fillPersonList(){
personList.add(new Person("Артем","8 800 555 3535"));
personList.add(new Person("Василий","8 802121 3535"));
personList.add(new Person("Нина","8 23222390 3535"));
}
}
Эксцепшены:
public class EmptyPersonException extends Exception {
public EmptyPersonException(){
super("Не все поля заполненны!");
}
}
public class NullPersonException extends Exception {
public NullPersonException(){
super("Не выбрана запись из списка!");
}
}
Вопрос: насколько употребимо в данной ситуации (для проверки заполненности полей объекта Person) применение механизма исключений?
Может быть стоило использовать if и return, к примеру?
@FXML
private void actionButtonPressed(ActionEvent actionEvent){
Object source = actionEvent.getSource();
if (!(source instanceof Button)) return;
Button clickedButton = (Button) source;
switch (clickedButton.getId()){
case "btnAdd":
addPaneController.setPerson(new Person());
showDialog(TypeDialog.ADD);
if (person.getFio().length() == 0 || person.getPhone().length() == 0){
DialogManager.showErrorDialog("Не все поля заполненны!");
return;
}
else
addressBookImpl.add(addPaneController.getPerson());
break;
case "btnEdit":
Person selectedPerson = (Person)tableAddresBook.getSelectionModel().getSelectedItem();
if (selectedPerson == null){
DialogManager.showErrorDialog("Не выбрана запись из списка!");
return;
}
else{
addPaneController.setPerson(selectedPerson);
showDialog(TypeDialog.UPDATE);
}
break;
case "btnDelete": break;
}
}
Какой из двух способов реализации метода actionButtonPressed лучше и почему? Что можете сказать про мой код?:) Принимаю любую критику. Заранее спасибо.