Итак, я изучаю программирование на JavaFX и MVC. Элемент управления также является собственным классом и не интегрирован в представление (я слышал, что это один из способов go). Я хочу, чтобы он был отделен от представления, но поскольку я пытаюсь инкапсулировать все и оставить все частным с ограниченным доступом к элементам управления / узлам, я обнаружил, что использую методы, чтобы делать почти все внутри моего объекта почти полностью при использовании обработчиков событий в элементе управления.
Пример (Не настоящая программа, просто написал ее здесь, потому что у меня нет коротких примеров.):
Просмотр:
public class SamplePane extends BorderPane {
private TextField tfScoreOne;
private Button btnScore, btnPenalty;
private int scoreOne;
public SamplePane() {
// Some constructor
}
public void giveScore() {
scoreOne++;
tfScoreOne.textProperty().setValue("Score: " + Integer.toString(scoreOne);
}
public void takeScore() {
scoreOne--;
tfScoreOne.textProperty().setValue("Score: " + Integer.toString(scoreOne);
}
}
public void btnScoreAddHandler(EventHandler<ActionEvent> handler) {
btnOneAdd.setOnAction(handler);
}
public void btnPenaltyAddHandler(EventHandler<ActionEvent> handler) {
btnOneAdd.setOnAction(handler);
}
Элемент управления:
public class SampleController {
public ModuleSelectionController() {
// Some contorller stuff again
samplePaneObj.btnScoreAddHandler(btnScoreHandler);
samplePaneObj.btnPenaltyAddHandler(btnScoreHandler);
}
private class btnScoreHandler implements EventHandler<ActionEvent> {
public void handle(ActionEvent arg0) {
samplePaneObj.giveScore();
}
}
private class btnPenaltyHandler implements EventHandler<ActionEvent> {
public void handle(ActionEvent arg0) {
samplePaneObj.takeScore();
}
}
}
Это в основном псевдокод, так что простите меня, если есть какие-то ошибки, но вы поняли? Кажется очень произвольным просто вызывать методы, но без передачи TextField в примере трудно не делать все без метода, выполняющего всю работу.
Но достаточно ли этого развязанного для MVC? Я действительно не хочу нарушать инкапсуляцию - это основная проблема, поэтому я не могу опубликовать элементы управления c и работать с ними непосредственно в контроллере.
Это все нормально? Я хочу убедиться, что понимаю это правильно.