Я создал ListView, но при его открытии элементы не выбираются.Как я могу автоматически выбрать первый загруженный элемент?Я спрашиваю об этом, потому что я пытаюсь создать почтовый клиент, и мне нужно, чтобы, когда пользователь открывает программу, информация о первом электронном письме должна автоматически загружаться.Это мой код:
public class ListController {
@FXML
private ListView<Email> listView;
private DataModel model;
public void initModel(DataModel model) {
if (this.model != null) {
throw new IllegalStateException("Model can only be initialized once");
}
this.model = model;
model.loadData(null);
listView.setItems(model.getEmailList());
listView.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection)
-> model.setCurrentEmail(newSelection));
model.currentEmailProperty().addListener((obs, oldEmail, newEmail) -> {
if (newEmail == null) {
listView.getSelectionModel().clearSelection();
} else {
listView.getSelectionModel().select(newEmail);
}
});
listView.setCellFactory(lv -> new ListCell<Email>() {
@Override
public void updateItem(Email mail, boolean empty) {
super.updateItem(mail, empty);
if (empty) {
setText(null);
} else {
setText(mail.getMittente());
}
}
});
}
РЕДАКТИРОВАТЬ: @Gnas Это мой код сейчас, но он все еще не работает:
public class ListController {
@FXML
private ListView<Email> listView;
private DataModel model;
public void initModel(DataModel model) {
if (this.model != null) {
throw new IllegalStateException("Model can only be initialized once");
}
this.model = model;
model.loadData(null);
listView.setItems(model.getEmailList());
if (!listView.getItems().isEmpty()) {
listView.getSelectionModel().select(0);
}
listView.setCellFactory(lv -> new ListCell<Email>() {
@Override
public void updateItem(Email mail, boolean empty) {
super.updateItem(mail, empty);
if (empty) {
setText(null);
} else {
setText(mail.getMittente());
}
}
});
}
РЕДАКТИРОВАТЬ 2:
public void start(Stage stage) throws Exception {
FXMLLoader listLoader = new FXMLLoader(getClass().getResource("lista.fxml"));
FXMLLoader menuLoader = new FXMLLoader(getClass().getResource("menubar.fxml"));
FXMLLoader textareaLoader = new FXMLLoader(getClass().getResource("textarea.fxml"));
FXMLLoader fieldLoader = new FXMLLoader(getClass().getResource("textfield.fxml"));
FXMLLoader buttonLoader = new FXMLLoader(getClass().getResource("button.fxml"));
AnchorPane root = new AnchorPane(listLoader.load(), textareaLoader.load(), fieldLoader.load(), menuLoader.load(), buttonLoader.load());
ListController listController = listLoader.getController();
MenuBarController menuController = menuLoader.getController();
TextAreaController textareaController = textareaLoader.getController();
TextFieldController fieldController = fieldLoader.getController();
ButtonController buttonController = buttonLoader.getController();
DataModel model = new DataModel();
listController.initModel(model);
menuController.initModel(model);
textareaController.initModel(model);
fieldController.initModel(model);
buttonController.initModel(model);
Scene scene = new Scene(root, 603, 403);
stage.setScene(scene);
stage.show();
}