Sto programmando una semplice applicazione Questionare. Sto usando un TableView all'interno di un componente javaFX personalizzato (che rappresenta una domanda), che viene usato come ListCell all'interno di un ListView (utilizzato per rappresentare l'intero questionario).Come limitare la dimensione di TableView di javafx alla dimensione necessaria?
Cosa voglio: Ogni ListCell utilizza il minimo spazio possibile (o necessario) mentre continua a riprodurre il suo contenuto completo.
Cosa succede: il TableView sembra essere impostato su una dimensione standard. Se la tabella ha più contenuti, visualizza il suo contenuto all'interno di un ScrollPane. Se il TableView ha meno contenuto, si riempie di spazio vuoto.
ho provato a risolvere il mio problema in vari modi:
Originariamente ho pensato che ci deve essere un modo disattivare le barre di scorrimento. Ma non sono riuscito a trovare alcun modo per farlo.
Poi ho cercato di cambiare la dimensione del tavolo cambiando il PreferredSizeProperty:
table.setPrefHeight()
ma non riesco a trovare tutte le informazioni su quanto grande sia il tavolo è.table.setPrefHeight(USE_COMPUTED_SIZE);
non ha avuto il risultato che speravo.Quindi ho provato a calcolare l'altezza necessaria da solo, ma non sono riuscito a trovare alcun modo per determinare l'altezza delle singole righe. Chiamando
this.getTableRow().getHeight()
all'interno del metodo di aggiornamento del TableCell personalizzato si otterrebbe NullPointerExceptions. Se controllato contro null, restituirebbe comunque 0!TableRow<T> tr = this.getTableRow(); if (tr != null) { System.out.println(tr.getHeight()); }
Piuttosto frustrato, ho deciso di fissare l'altezza della riga, chiamando
table.setFixedCellSize(20);
Questa gravemente limita il punto di TableCells personalizzati, ma non stavo facendo alcun progresso altrimenti. Tuttavia, l'altezza della tabella non è uguale al numero di linee moltiplicato per un'altezza di riga fissa, poiché l'intestazione della tabella deve essere presa in considerazione. E non ho potuto accedere all'intestazione della tabella o chiedere le dimensioni/altezza delle intestazioni della tabella.
Avete qualche suggerimento dove ho sbagliato o che cosa ho trascurato per raggiungere il mio obiettivo originale (Avere un ListCell che è preciesly grande come un necessario per visualizzare ogni riga della tabella, ma non una sola linea vuota?) Qualsiasi aiuto/idee sarebbe il benvenuto! Grazie!
Così lo avete riempito insieme: ListView -> ListCell -> TableView? Questo è sbagliato su così tanti livelli ... Non so da dove cominciare. Ti consiglio vivamente di riscrivere l'interfaccia utente con componenti diversi. ListView e TableView hanno entrambi lo scopo di visualizzare enormi quantità di dati e quindi di strutturare i propri figli (celle) in modo virtualizzato. Non ha lo scopo di visualizzare una singola domanda contenente un TableView come grafica ListCell. – eckig
Una domanda viene repressa da un componente personalizzato che utilizza un TableView come sottocomponente. Ogni domanda è di per sé una ListCell, da visualizzare in una ListView. Il TableView non è grande nel mio caso: può contenere da 1 a 10 righe. Sono d'accordo: per una riga sembra un po 'inutile, ma se sono necessarie diverse linee, non vedo ancora cosa c'è di sbagliato in essa. – thorwinn
Quello che stai cercando di fare sarà molto difficile (se è anche possibile). Un 'TableView' non dovrebbe essere usato per il layout, che è effettivamente quello che stai cercando di fare qui. Hai effettivamente bisogno di una funzionalità di una vista tabella (colonne ridimensionabili, colonne trascinabili, ordinamento su clic dell'intestazione, ecc.)? Altrimenti potrebbe essere meglio usare un riquadro di layout (ad esempio un 'GridPane') per visualizzare la cella invece di un' TableView'. –