Possiedo un controllo ListView con cella personalizzata. Calcolo il massimo su celle minWidth e lo imposta come minWidth per l'intero ListView. Quindi il ListView vincolato da altre regioni nel layout viene ridotto esattamente a minWidth. Ma le celle che contiene sono ridimensionate alla larghezza preferita, non minima. Di conseguenza i nodi non si adattano a contenere la vista e viene mostrata la barra di scorrimento orizzontale.Come rendere ListView larghezza larghezza delle celle
È brutto. Mi piacerebbe rendere ogni cella esattamente adatta a ListView e sbarazzarsi della barra di scorrimento. Più preciso. Quando ListView è ridotto alla sua larghezza minima, anche tutte le sue celle dovrebbero essere ridotte a questa larghezza minima.
Sono alla ricerca di alcune proprietà di controllo che modificano il criterio di ridimensionamento della cella di alcuni hack per ottenere un comportamento descritto nel caso in cui non vi siano switch predefiniti.
aggiornamento: aggiunto example graphic
ho creato SplitPane semplificare layout di prova. Posso definire le restrizioni del layout spostando il suo separatore con il mouse.
Il primo scatto mostra il problema iniziale: le dimensioni effettive (min, max, pref) dei nodi di cella non vengono rispettate. ListView utilizza sempre prefWidth anche se è maggiore della larghezza della finestra. Quindi lo scroll orizzontale viene usato quando può essere evitato.
Dopo che ho cercato di impostare manualmente larghezza preferita minore. Quindi la cella ora è completamente visibile. Questa non è la soluzione. Fornisco questo scatto per dimostrare che la cella ha una larghezza minima sufficiente per adattarsi all'interno di ListView.
L'ultimo colpo è troppo brutto. Lascia lo spazio libero che può essere riempito con il contenuto della cella. È naturale: se viewport è più grande della larghezza preferita e minore della larghezza massima, allora dovrebbe essere usato per ridimensionare il contenuto della cella.
Il problema può essere eliminato passando a dimensioni statiche di elementi specificati in modo esplicito. Ma farlo significa scartare tutti i vantaggi dei layout dinamici: il programmatore sarebbe obbligato a modificare le costanti di dimensione ogni volta che viene applicato un nuovo skin con i CSS e all'utente sarà vietato ridimensionare la finestra o spostare il separatore con il mouse.
E anche questa è una soluzione sbagliata. Quello di cui ho bisogno - per far funzionare il motore di layout di javafx. La larghezza minima di ListView dovrebbe essere la larghezza minima delle celle. La larghezza massima di ListView dovrebbe essere la larghezza massima più bassa delle sue celle. La larghezza preferita di ListView dovrebbe essere la maggiore larghezza preferita delle sue celle. E rispetto alla larghezza effettiva di ListView dovrebbe essere impostato dal suo genitore (SplitPane in questo esempio) con rispetto a tutti e tre i limiti del layout. E dopo che questa dimensione dovrebbe essere passata alle cellule.
La barra di scorrimento orizzontale deve essere visualizzata solo nel caso in cui la larghezza minima di una cella sia troppo grande per essere inserita nella finestra.
Potete aggiungere codice per quello che avete già provato. Se possibile un'immagine pure. – ItachiUchiha
In realtà ho scritto in scala. È adatto per inserire il codice scala nella domanda javafx? – ayvango
Sì dopo aver aggiunto il tag "scala". Uno può convertirlo in Java anche se ci possono essere diversi comportamenti. –