Вам потребуется реализовать пользовательский CellFactory
на ListView
.Затем мы можем определить, принадлежит ли ячейка первому элементу в List
, который вы использовали для заполнения Listview
.Если так, примените другой стиль только к этой ячейке.
Я не знаю, есть ли способ определить первую ячейку из ListView
, но мы можемобязательно захватите первый элемент в List
.
. Рассмотрим следующее приложение.У нас есть ListView
, который просто отображает список строк.
Мы устанавливаем пользовательский CellFactory
для ListView
и устанавливаем стиль ячейки, если item
является первым в List
заполнение ListView
.
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// Simple interface
VBox root = new VBox(5);
root.setPadding(new Insets(10));
root.setAlignment(Pos.CENTER);
// Create the ListView
ListView<String> listView = new ListView<>();
listView.getItems().setAll("Title", "One", "Two", "Three", "Four", "Five");
// Set the CellFactory for the ListView
listView.setCellFactory(list -> {
ListCell<String> cell = new ListCell<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
// There is no item to display in this cell, so leave it empty
setGraphic(null);
// Clear the style from the cell
setStyle(null);
} else {
// If the item is equal to the first item in the list, set the style
if (item.equalsIgnoreCase(list.getItems().get(0))) {
// Set the background color to blue
setStyle("-fx-background-color: blue; -fx-text-fill: white");
}
// Finally, show the item text in the cell
setText(item);
}
}
};
return cell;
});
root.getChildren().add(listView);
// Show the Stage
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
}
Результат
Очевидно, вам нужно будет внести некоторые корректировки в соответствии с вашей моделью данных, и просто сопоставление с помощью String
не будет лучшим подходом.
Это не мешает пользователю выбиратьпервый элемент и может работать не так, как ожидалось, если список отсортирован после построения сцены.
Хотя это может ответить на ваш прямой вопрос, есть и другие вещи, которые следует учитывать, чтобы обеспечить удобство работы для пользователя.