2 разных списка в одном ListView в JavaFX, разделенные заголовком - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь реализовать список событий на одной странице в JavaFX, и я хотел бы отобразить 2 списка: один для событий UPCOMING и один для событий PAST, оба относительно текущей даты.

Многие поиски в Интернете привели меня к использованию ArrayAdaptor, но мне не разрешается использовать любые другие библиотеки, кроме JavaFX.

Я также хотел бы разделить эти 2 списка заголовком , Сейчас я работаю с базовым кодом:


/**
 * Panel containing the list of persons.
 */
public class HomePage extends UiPart<Region> {
    private static final String FXML = "home/HomePage.fxml";
    private final Logger logger = LogsCenter.getLogger(HomePage.class);

    @FXML
    private ListView<Trip> tripListView;

    public HomePage(ObservableList<Trip> tripList) {
        super(FXML);

        tripListView.setItems(tripList);
        tripListView.setCellFactory(listView -> new TripListViewCell());
    }

    /**
     * Custom {@code ListCell} that displays the graphics of a {@code Trip} using a {@code TripCard}.
     */
    class TripListViewCell extends ListCell<Trip> {
        @Override
        protected void updateItem(Trip trip, boolean empty) {
            super.updateItem(trip, empty);
            if (empty || trip == null) {
                setGraphic(null);
                setText(null);
            } else {
                setGraphic(new HomePageTripCard(trip, getIndex() + 1).getRoot());
            }
        }
    }

}

Это код .fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx/11" xmlns:fx="http://javafx.com/fxml/1">
   <StackPane prefHeight="30.0" prefWidth="200.0" styleClass="stack-welcome" VBox.vgrow="NEVER">
      <children>
         <Label styleClass="label-welcome" text="Welcome-Message-Here" />
      </children>
   </StackPane>
   <StackPane prefHeight="15.0" prefWidth="200.0" styleClass="stack-header" VBox.vgrow="NEVER">
      <children>
        <Label styleClass="label-header" text="TripList" />
      </children>
   </StackPane>
   <StackPane>
      <ListView fx:id="tripListView" prefWidth="247.0" VBox.vgrow="ALWAYS" />
      <ListView fx:id="tripListView" prefWidth="247.0" VBox.vgrow="ALWAYS" />
   </StackPane>
</VBox>

Я пытался использовать 2 разных представления списка, по некоторым причинам он показывает только с одним из представлений списка.

У кого-нибудь есть какие-либо советы о том, как go реализовать 2 списка в одном представлении списка в JavaFX?

1 Ответ

0 голосов
/ 04 апреля 2020

Я просто решил вместо этого использовать 2 представления списка, причем каждое представление списка имеет свои собственные ячейки списка, оба в пределах одного VBox.

Реализация в файле java

        tripListViewUpcoming.setItems(upcoming);
        tripListViewUpcoming.setCellFactory(listViewUpcoming -> new TripListViewCellUpcoming());

        tripListViewPast.setItems(past);
        tripListViewPast.setCellFactory(listViewPast -> new TripListViewCellPast(upcoming.size()));

Реализация в файле F XML

   <StackPane prefHeight="15.0" prefWidth="200.0" styleClass="trip-list-header" style="-fx-border-width: 0px 0px 2px 0px" VBox.vgrow="NEVER">
      <children>
         <Label styleClass="label-header" text="UPCOMING TRIPS" />
      </children>
   </StackPane>
   <ListView fx:id="tripListViewUpcoming" prefWidth="247.0" style="-fx-background-color: #fff;" VBox.vgrow="ALWAYS" />

   <StackPane prefHeight="15.0" prefWidth="200.0" styleClass="trip-list-header" style="-fx-border-width: 2px 0px 2px 0px" VBox.vgrow="NEVER">
      <children>
         <Label styleClass="label-header" text="PAST TRIPS" />
      </children>
   </StackPane>
   <ListView fx:id="tripListViewPast" prefWidth="247.0" style="-fx-background-color: #fff;" VBox.vgrow="ALWAYS" />

Недостатком является то, что второе представление списка не появляется сразу после последней ячейки в первом представлении списка, и оба представления списка прокручиваются взаимозависимо.

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