Как реализовать arraylist в ListView? - PullRequest
2 голосов
/ 19 июня 2019

Я только начинаю работать с JavaFX, который мне кажется довольно классным, поэтому я пытаюсь внедрить массив списков класса ToDListItem в listView моего файла FXML

Я пытался добавить элементы в свойarraylist, который является todoitems, затем установите все это в listView, который имеет идентификатор 'ToDoList' в моем файле FXML, но кажется, что ничто не поможет, когда пользовательский интерфейс отображает

package sample;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import sample.ToDoList.ToDoItem;

import java.time.LocalDate;
import java.time.Month;
import java.util.ArrayList;
import java.util.List;

public class Controller {
    private List<ToDoItem> todoitems;

    @FXML
    private ListView ToDoList ;

    public void intialize(){
        ToDoItem item1= new ToDoItem("Going to Sea","Going to Sea with thamer and kais",
                LocalDate.of(2020, Month.JUNE,16));
        ToDoItem item2= new ToDoItem("JavaFx","Getting ready for real programming real world stuff",
                LocalDate.of(2020, Month.JULY,14));
        ToDoItem item3= new ToDoItem("Sleep & Chill","Going to Watch Youtube Later & Chill",
                LocalDate.of(2020, Month.JANUARY,13));

        todoitems= new ArrayList<>();

        todoitems.add(item1);
        todoitems.add(item2);
        todoitems.add(item3);

        ToDoList.getItems().setAll(todoitems);
        ToDoList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
    }
}

файл FXML.

<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.ListView?>
<BorderPane fx:controller="sample.Controller"  xmlns:fx="http://javafx.com/fxml">
  <left>
      <ListView fx:id="ToDoList">
      </ListView>
  </left>
</BorderPane>

Я не получил никакого результата при отображении интерфейса

1 Ответ

2 голосов
/ 19 июня 2019

Метод должен называться initialize , но не int ialize. Я бы предпочел использовать javafx.fxml.Initializable , чтобы избежать ошибки в написании.

Это не рекомендуемый подход :

List<T> content = ...
getItems().setAll(content);

Проблема с подходом, показанным выше, заключается в том, что список контента копируется в список элементов.

Использование:

ObservableList<T> content = ...
listView.setItems(content);
public class Controller {
    private final List<ToDoItem> todoItems = FXCollections.observableArrayList();

    @FXML
    private ListView ToDoList ;

    public void initialize() {
        ToDoList.setItems(todoItems);
        ToDoList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
        populate();
    }

    private void populate () {
        todoItems.add(new ToDoItem("Going to Sea","Going to Sea with thamer and kais",
                LocalDate.of(2020, Month.JUNE,16)));
        todoItems.add(new ToDoItem("JavaFx","Getting ready for real programming real world stuff",
                LocalDate.of(2020, Month.JULY,14)));
        todoItems.add(new ToDoItem("Sleep & Chill","Going to Watch Youtube Later & Chill",
                LocalDate.of(2020, Month.JANUARY,13)));
    }
}

Убедитесь, что метод ToDoItem.toString правильно переопределен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...