Используйте фабрику ячеек, которая устанавливает графику до Label
и стиль этикетки. Например:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.stage.Stage;
public class FormattedListCell extends Application {
@Override
public void start(Stage primaryStage) {
ListView<String> listView = new ListView<>();
listView.getItems().addAll("One", "Two", "Three", "Four");
listView.setCellFactory(lv -> new ListCell<String>() {
private final Label label = new Label();
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
label.setText(item);
setGraphic(label);
}
}
});
Scene scene = new Scene(listView, 400, 400);
scene.getStylesheets().add("formatted-list-cell.css");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
и изменить таблицу стилей:
.list-cell .label {
display: inline-block;
-fx-min-width: 50px;
-fx-background-color: lightyellow;
-fx-background-radius: 30px;
-fx-border-radius: 20px;
-fx-border-width: 2px;
-fx-border-style: solid;
-fx-border-color: #666666;
}
.list-cell:empty .label {
-fx-background-color: transparent;
-fx-border-width: 0px;
}
Возможно, вам на самом деле стиль списка ячейки (а также этикетку внутри него), чтобы получить точный стиль, который вы хотите, но это должно начните.
Вот более полный CSS файл, который использует -fx-background
так, что цвет текста будет автоматически регулировать, управляет цветом выбора, а также добавляет некоторые стили к самой ячейке списка:
.list-cell {
-fx-background-color: transparent ;
-fx-padding: 0 ;
}
.list-cell .label {
display: inline-block;
-fx-background: lightyellow;
-fx-background-color: -fx-background ;
-fx-background-radius: 30px;
-fx-border-radius: 20px;
-fx-border-width: 2px;
-fx-border-style: solid;
-fx-border-color: #666666;
-fx-padding: 12px ;
}
.list-cell:empty .label {
-fx-background-color: transparent;
-fx-border-width: 0px;
}
.list-cell:selected .label {
-fx-background: -fx-selection-bar ;
}
Вы хотите сказать, что список неровный? Правый край находится в разных положениях в соответствии с длиной текста в строке? – Itai
Глядя снова, я понимаю, что вы имеете в виду основной текст, а не список пользователей слева, что имеет больше смысла. Я считаю, что ячейка списка игнорирует все размеры, как это описано в «ListView», поэтому вам, вероятно, придется предоставить настраиваемую фабрику ячеек и создать внутренний узел (например, «TextFlow»). – Itai