2013-08-30 12 views
9

Sto tentando di ridimensionare una finestra scene2d.ui (che in pratica è una tabella che può essere spostata) e il suo contenuto. Finora posso solo modificare con successo la dimensione della finestra stessa, ma non il suo contenuto. Lo sto facendo in questo modo:Come modificare le dimensioni di un widget scene2d.ui esistente in una finestra/tabella?

window.setWidth(newTableWidth); 
textField.setWidth(newFieldWidth); 
window.invalidate(); <--- New size of window is drawn properly when invalidate() is called 
textField.invalidate(); <--- New textField size is NOT drawn, however 

In questo caso, la finestra contiene un campo di testo che sto cercando di ridimensionare insieme alla finestra, ma solo la finestra viene ridisegnata con la sua nuova dimensione, mentre il testo il campo rimane lo stesso.

Come aggiornare correttamente i widget all'interno della finestra?

risposta

1

in base alla risposta del BeenX, è evidente che la dimensione sia impostato sulla cella della tabella che contiene il widget, piuttosto che sul widget stesso. Il metodo table.add() restituisce una cella, quindi quando si esegue table.add(textField).width(600).height(60) la larghezza e l'altezza vengono applicate a questa cella.

Quindi la mia soluzione per aggiornare una cella già esistente era quella di trovare la cella che voglio aggiornare con table.getCells() quindi applicare la nuova larghezza su quello. L'esempio seguente modifica la larghezza dell'ultima cella nell'elenco.

List<Cell> cells = window.getCells(); 
Cell cell = cells.get(cells.size()-1); 
cell.width(newWidth); 
15

Ho avuto lo stesso problema e ci è voluto un po 'per ottenere la soluzione. Dai un'occhiata a questa quastion slider always has default width.

La soluzione è: i widget

UI non impostare la propria dimensione e posizione. Invece, il widget genitore imposta la dimensione e la posizione di ogni bambino. I widget forniscono una dimensione minima, preferita e massima che il genitore può utilizzare come suggerimenti. Alcuni widget parent, come Table, possono avere vincoli su come dimensionare e posizionare i bambini. Per assegnare a un widget una dimensione specifica in un layout, le dimensioni minime, preferite e massime del widget vengono lasciate sole e i vincoli di dimensione sono impostati nel genitore.
Layout at Wiki

Dal wiki di libGDX. L'hanno appena aggiunto. Quindi mentre aggiungi questi widget alla tabella aggiungi semplicemente la riga .width(newTableWidth) alla fine e dovrebbe essere alla larghezza giusta.

table.add(textField).width(600).height(60); 
+1

Grazie. Ecco come faccio a impostare inizialmente la dimensione del widget, ma sto cercando di cambiarlo dopo che è stato impostato. Sto ridimensionando il tavolo, ma tutto all'interno mantiene le stesse dimensioni fino a quando non aggiungo una nuova riga. Sai se è possibile "aggiornare" le dimensioni del widget senza aggiungere qualcosa di nuovo alla tabella? Finora questo mi sembra una debolezza con scene2d per me, non sembra che sia progettato per essere modificato dinamicamente dopo che è stato impostato una volta. – mattboy

+0

si ridimensiona la cella di esso non il widget stesso. dopodiché usi l'invalidate sul tavolo. Penso che non sia debole proprio come funziona – BennX

+0

Sì, ho appena realizzato ora anche che le modifiche devono essere apportate alla cella, non al widget. Grazie per avermi indicato nella giusta direzione. – mattboy

Problemi correlati