import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
* JavaFX App
*/
public class App extends Application {
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage stage) {
// La vue de la liste
ListView < Contact > contactsListView = new ListView < Contact > ();
// La liste contenant les contacts
ObservableList < Contact > contactObservableList = FXCollections.observableArrayList();
// Ajoute la liste dans la vue de liste
contactsListView.setItems(contactObservableList);
// Ajoute les contacts à la liste
contactObservableList.addAll(new Contact("avatar1.png", "Samantha King"),
new Contact("avatar2.png", "Baker Hall"), new Contact("avatar3.png", "Sienna Hamilton"));
// La cellule de liste customisée
contactsListView.setCellFactory(item -> new ContactCell());
var scene = new Scene(new StackPane(contactsListView), 640, 480);
stage.setScene(scene);
stage.show();
}
}
class ContactCell extends ListCell < Contact > {
@Override
protected void updateItem(Contact contact, boolean empty) {
// Rafraichissement l'élément sélectionné
super.updateItem(contact, empty);
// Si vide ou nul
if (empty || contact == null) {
// Rien à afficher
setGraphic(null);
setText(null);
} else {
// HBox contenant le contact (image + nom)
HBox root = new HBox();
root.setSpacing(10);
// Centre le label au centre gauche
root.setAlignment(Pos.CENTER_LEFT);
ObservableList < Node > children = root.getChildren();
// L'image du contact
ImageView avatarImageView = new ImageView(contact.getImagePath());
avatarImageView.setFitWidth(75);
avatarImageView.setFitHeight(75);
// Le nom
Label nameLabel = new Label(contact.getName());
nameLabel.setStyle("-fx-font-size: 18px;");
// Ajoute les éléments
children.add(avatarImageView);
children.add(nameLabel);
// Affiche l'item
setGraphic(root);
}
}
}
// La classe contact pour les données
class Contact {
private String imagePath;
private String name;
public Contact(String imagePath, String name) {
this.imagePath = imagePath;
this.name = name;
}
public String getImagePath() {
return imagePath;
}
public String getName() {
return name;
}
}
Commentaires
Enregistrer un commentaire