2012-06-21 16 views
5

Tôi đang cố gắng tạo ra một trò chơi đơn giản (nó là một bài tập ở trường) trong JavaFX và tôi đang cố gắng xóa bảng bằng bảng, và sau đó chỉ vẽ lại nó. Tôi đã thử rất nhiều phương pháp, và đây là phương pháp duy nhất tôi tìm thấy để loại bỏ tất cả các phần của bảng (trực quan) mà không tạo ra lỗi trực quan cho thấy một đoạn đã bị xóa nhưng vẫn được hiển thị.GridPane sạch trong JavaFX và duy trì đường lưới

Vì vậy, tôi tuyên bố gridPane như thế này:

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 
} 

Vấn đề với phương pháp này, được rằng khi "gridPecas.getChildren() rõ ràng();" được gọi là tôi chỉ mất các đường lưới từ GridPanel.

Làm cách nào để giải quyết vấn đề này?

Trả lời

0

Hmm đề xuất của tôi không phải là xóa tất cả trẻ em. Luôn rời khỏi imageViews và chỉ thay thế hình ảnh mà chúng hiển thị. Để "xóa" bảng, hãy đặt hình ảnh "trống".

+0

Cảm ơn câu trả lời của bạn, nhưng tôi vừa tìm ra giải pháp hoàn hảo xD Thay vì thực hiện "gridPecas.getChildren(). Clear();" Tôi chỉ làm điều này trong chu trình: "gridPecas.getChildren(). RemoveAll (pecasFX [i] [j]);" Vì vậy, khi đọc mảnh nó xóa nó khỏi lưới điện, và, nhờ vào mã "điền bảng" ban đầu, anh đã có một cái mới để lại đường viền sạch sẽ và cập nhật. – aliasbody

3

Một cách để xóa GridPane và duy trì Gridlines là như sau:

Node node = grid.getChildren().get(0); 
    grid.getChildren().clear(); 
    grid.getChildren().add(0,node); 

nút đầu tiên * trong GridPane (* nếu bạn đặt GridLinesVisible trước khi thêm phần tử vào lưới?) Chứa Gridlines (và có thể là o điều đó).

Vì vậy, bạn chỉ cần giữ nút này trước khi rõ ràng & tái thêm nó sau

1

một một liner:.. Grid.getChildren() retainAll (grid.getChildren() nhận được (0));