Ho un ScrollPane nella mia scena e vorrei aggiungere una serie di nodi. L'importo esatto deve essere dinamico. Ho testato il concetto con i nodi Label e posso aggiungere con successo tante etichette quanto voglio al contenuto di ScrollPane (attualmente un VBox).JavaFX - Aggiunta di nodi a ScrollPane con direzione di scorrimento corretta
Il mio problema è capire come consentire all'utente di scorrere normalmente attraverso il ScrollPane pieno di nodi. Il contenuto corrisponde alla barra di scorrimento; cioè, quando si scorre verso il basso, il contenuto si sposta verso il basso. Scorro verso l'alto, il contenuto scorre verso l'alto. Quindi, se ho 10 etichette, di cui solo cinque sono attualmente visibili, l'azione istintiva per vedere le altre cinque sarebbe quella di scorrere verso il basso. Sfortunatamente, questo sposta solo l'intero contenuto verso il basso, esponendo lo spazio vuoto in alto e nascondendo più etichette.
posso postare alcuni esempi di codice se questo aiuta, ma il succo del mio piano di attacco è questo:
ScrollPane sp = new ScrollPane();
VBox content = new VBox();
sp.setContent(content);
for (int i = 0; i < 10; i++)
{
Label label = new Label("Label " + i);
content.setPrefHeight(content.getPrefHeight() + label.getPrefHeight());
content.getChildren().add(label);
}
Perché io uso un VBox, le etichette sono impilati (in asse Y) in cima a uno un altro, che è quello che voglio. Man mano che vengono aggiunte più etichette, ScrollBar deve riflettere la maggiore dimensione del VBox. Ho provato alcuni approcci per farlo funzionare, incluso il metodo ScrollPane.setVmax()
, che è ok, ma ho ancora il problema della direzione di scorrimento che sposta il contenuto nella direzione sbagliata. Ho anche provato un EventHandler
e EventFilter
per modificare i valori di conseguenza, ancora senza risolvere il problema delle pergamene che non spostano il contenuto nella giusta direzione.
La risposta sembra così semplice, eppure continua a sfuggirmi, anche dopo molte lunghe ore incasinate con il codice.
EDIT: suggerimento
di jewelsea di utilizzare un ListView
risolto il mio problema. Tuttavia, rimango curioso sul motivo per cui l'utilizzo di uno ScrollPane
non è andato così bene. Inoltre, ho avuto un comportamento strano con l'implementazione ListView
: utilizzo un pulsante per aggiungere manualmente un nuovo Label
alla vista. Ogni tanto, la vista si blocca dopo aver aggiunto un nuovo Label
. Si blocca per alcuni secondi prima di aggiornare la posizione di scorrimento o di visualizzare la nuova aggiunta Label
. Non so se questo è dovuto al fatto che ci sono circa 20 o più istanze di Label
gestite dalla vista o se qualcosa di più insidioso è in gioco.
Qualsiasi motivo per non utilizzare un 'ListView' per implementarlo? Penso che possa prendersi cura di questo tipo di problemi per te. – jewelsea
@jewelsea, l'hai risolto! Sono sempre stupito di come la maggior parte di questi problemi sembri così grande eppure la loro soluzione sia così semplice. Sono stato in grado di usare un 'ListView