У меня проблемы с пониманием того, как применить шаблон mvc с JavaFX.
Вот мои вопросы относительно кода ниже, так как мне нужно следовать шаблону, приведенному в коде:
a) Как я могу прикрепить обработчик события кнопки, присутствующей в моем ViewA, к коду в моем ControllerA (в частности, метод attachEventHandlers()
). Например, я хочу, чтобы моя кнопка заполняла comboBox в ViewA результатами метода getModelItems()
из контроллера.
Обратите внимание, что метод getModelItems()
является приватным.
б) У меня будет несколько кнопок и обработчиков событий. Как я буду связывать каждого из них уникально с контроллером?
c) Я хочу вызвать setName(String name)
для моей модели в контроллере, и параметр, который я хочу передать, является выбранным значением в комбинированном окне в viewA. Как мне этого добиться?
Большое спасибо за любую помощь!
Ниже приведен код, указанный в описании.
Контроллер:
import model.ModelA;
import view.ViewA;
public class ControllerA {
private ViewA view;
private ModelA model;
public ControllerA(ViewA view, ModelA model) {
//initialise model and view fields
this.model = model;
this.view = view;
//populate combobox in ViewB, e.g. if viewB represented your ViewB you could invoke the line below
//viewB.populateComboBoxWithCourses(setupAndRetrieveCourses());
this.attachEventHandlers();
}
private void attachEventHandlers() {
}
private String[] getModelItems() {
String[] it = new String[2];
it[0] = "0";
it[1] = "1";
return it;
}
}
Модель:
public class ModelA {
private String name;
public Name() {
name = "";
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Name = " + name;
}
}
Вид:
import javafx.scene.layout.BorderPane;
//You may change this class to extend another type if you wish
public class ViewA extends BorderPane {
public BorderPane bp;
public ViewA(){
this.bp = new BorderPane();
ComboBox comboBox = new ComboBox();
Button button1 = new Button("Populate");
bp.setTop(button1);
bp.setBottom(comboBox);
}
}
Loader:
public class ApplicationLoader extends Application {
private ViewA view;
@Override
public void init() {
//create model and view and pass their references to the controller
ModelA model = new ModelA();
view = new ViewA();
new ControllerA(view, model);
}
@Override
public void start(Stage stage) throws Exception {
//whilst you can set a min width and height (example shown below) for the stage window,
//you should not set a max width or height and the application should
//be able to be maximised to fill the screen and ideally behave sensibly when resized
stage.setMinWidth(530);
stage.setMinHeight(500);
stage.setTitle("Final Year Module Chooser Tool");
stage.setScene(new Scene(view));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}