У меня есть ListView с 16 элементами. Когда я прокручиваю его (используя стрелки или мышь) стандартной прокрутки ListView, он прокручивает половину элемента.
Что мне нужно, так это прокручивать по одному элементу (при нажатии на стрелки или при прокрутке с помощью мыши), чтобы в списке никогда не отображалось половина элементов. Есть какой-либо способ сделать это?
Вот мой код:
public void start(Stage primaryStage) throws IOException {
ListView<String> lstRequestOpt = new ListView<>();
List<String> x = new ArrayList<>();
for(int i = 0; i < 30; i++) {
x.add("item " + i);
}
ObservableList<String> items = FXCollections.observableArrayList(x);
lstRequestOpt.setItems(items);
Scene scene = new Scene(lstRequestOpt);
primaryStage.setScene(scene);
primaryStage.show();
}
Вот выходное изображение:
ListView с половиной элементов
Я пытаюсь добиться того, чтобы элементы отображались полностью, а не как на картинке:
- При прокрутке
- При перемещении полосы прокрутки с помощью мыши
- При нажатии на стрелки на полосе прокрутки
Есть ли способ сделать это?
UPDATE:
Мне удалось создать метод, который будет печатать что-либо, когда используется прокрутка или стрелки, даже если это самая маленькая прокрутка. Теперь мне нужно найти способ установить значение движения в свитке и интегрировать его с ListView. Я буду продолжать работать над этим. Вот код:
for (Node node : lstRequestOpt.lookupAll(".scroll-bar")) {
if (node instanceof ScrollBar) {
final ScrollBar bar = (ScrollBar) node;
bar.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> value, Number oldValue, Number newValue) {
if ((double) oldValue < (double) newValue) {
System.out.println("UP");
} else {
System.out.println("DOWN");
}
}
});
}
}
Спасибо всем, кто мне помогает.