2012-06-21 12 views
5

Sto cercando di creare un gioco semplice (è un lavoro scolastico) in JavaFX e sto cercando di svuotare il pannello con la scheda e quindi ridipingerlo. Ho provato un sacco di metodi, e questo è l'unico che ho trovato che rimuove tutti i pezzi della scheda (visivamente) senza creare un bug visivo che mostri un pezzo che è già stato cancellato ma che viene comunque mostrato.Pulire gridPane in JavaFX e mantenere la riga Grid

Quindi dichiaro il gridPane in questo modo:

private GridPane gridPecas; 

@Override 
public void start(Stage primaryStage) 
{ 
    gridPecas = new GridPane(); 
    gridPecas.setGridLinesVisible(true); 

    paintBoard(); 

    // rest of the code to create and paint the Stage 
} 

private void paintBoard() 
{ 
    gridPecas.getChildren().clear(); 
    // Code to fill the board with ImageView and Images of the pieces 
} 

Il problema con questo metodo, è che quando i "gridPecas.getChildren() Clear();" Si chiama I just loose the grid lines dal GridPanel.

Come posso risolvere questo problema?

risposta

0

Hmm il mio suggerimento non è quello di eliminare tutti i bambini. Lascia sempre imageView e sostituisci semplicemente le immagini che mostrano. Per "cancellare" la scacchiera ha messo un'immagine "vuota".

+0

Grazie per le vostre risposte, ma ho appena trovato la soluzione perfetta xD Invece di fare "gridPecas.getChildren(). Clear();" Lo faccio solo nel ciclo for: "gridPecas.getChildren(). RemoveAll (pecasFX [i] [j]);" Così, quando legge il pezzo, lo cancella dalla griglia e, grazie al codice originale "scheda di riempimento", ne ha preso uno nuovo lasciando il bordo pulito e aggiornato. – aliasbody

3

Un modo per cancellare il GridPane e mantenere la griglia è la seguente:

il primo Nodo * in GridPane (* se si imposta GridLinesVisible prima di aggiungere elementi nella griglia?) Contiene le Gridline (e forse o ther cose).

Quindi è solo bisogno di mantenere questo nodo prima limpide & riaggiungerlo dopo

1

un uno-liner:.. Grid.getChildren() retainAll (grid.getChildren() ottiene (0));