Мне нужно создать пользовательский компонент с Virtualflow . Когда я создаю его вручную, у меня нет проблем. Теперь я хочу попытаться создать его с помощью пользовательской кожи . Это мой код: < /p>
public class NewMain extends Application {
public static class MyControl extends Control {
private ObservableList items;
public MyControl(ObservableList items) {
this.items = items;
setSkin(new MySkin(this));
}
public ObservableList getItems() {
return items;
}
}
public static class MySkin extends VirtualContainerBase {
public MySkin(MyControl c) {
super(c);
getChildren().add(getVirtualFlow());
getVirtualFlow().setCellFactory(vf -> new VirtualCell() {
@Override
public void updateIndex(int index) {
super.updateIndex(index);
if (index >= 0 && index < getSkinnable().getItems().size()) {
updateItem(getSkinnable().getItems().get(index), false);
} else {
updateItem(null, true);
}
}
});
getVirtualFlow().setCellFactory(vf -> new VirtualCell());
getVirtualFlow().setCellCount(getSkinnable().getItems().size());
}
@Override
protected int getItemCount() {
return getSkinnable().getItems().size();
}
@Override
protected void updateItemCount() {
}
}
public static class VirtualCell extends IndexedCell {
private static int counter = 0;
public VirtualCell() {
System.out.println("Created:" + counter);
counter++;
}
@Override
protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
} else {
setText(item.toString());
}
}
@Override
protected Skin createDefaultSkin() {
return new CellSkinBase(this);
}
}
@Override
public void start(Stage primaryStage) {
List list = new ArrayList();
for (var i = 0; i < 100; i++) {
list.add("Item " + i);
}
ObservableList items = FXCollections.observableArrayList(list);
var control = new MyControl(items);
VBox.setVgrow(control, Priority.ALWAYS);
var root = new VBox(control);
Scene scene = new Scene(root, 600, 200);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
< /code>
Но элементы не отображаются. Кто -нибудь может сказать, как это исправить?
Подробнее здесь: https://stackoverflow.com/questions/795 ... rtual-flow
Как создать простую индивидуальную кожу с виртуальным потоком? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
SpringBoot 3.4 с включенным виртуальным потоком, но с последовательным выполнением
Anonymous » » в форуме JAVA - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как взаимодействовать между традиционным потоком и потоком asyncio в Python?
Anonymous » » в форуме Python - 0 Ответы
- 44 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как взаимодействовать между традиционным потоком и потоком asyncio в Python?
Anonymous » » в форуме Python - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-