JavaFX - setVnable ẩn phần tử nhưng không sắp xếp lại các nút liền kề


83

Trong JavaFX, nếu tôi có một cảnh có 2 VBoxphần tử và mỗi phần VBoxcó nhiều phần tử Labeltrong đó.
Nếu tôi đặt phía trên VBoxđể vô hình , tại sao phía dưới VBox không di chuyển lên cảnh đầu VBoxlà?

Vật VBoxnày là vô hình nhưng tôi mong đợi các vật thể khác sẽ di chuyển vào vị trí của nó.

Tôi đang sử dụng FXML để tải các điều khiển của mình.


2
Bởi vì đầu tiên VBoxchỉ là vô hình và không phải removedtừ cha mẹ của nó.
ItachiUchiha

1
có hay không các nút ẩn mất bất kỳ không gian thường là quyết định của bố cục
Kleopatra

Câu trả lời:


165

Node.setVisible(boolean)chỉ chuyển đổi trạng thái hiển thị của a Node.

Để loại trừ a Nodekhỏi các tính toán bố cục cha mẹ của nó, bạn cũng phải đặt trạng thái được quản lý của nó, bằng cách gọi Node.setManaged(false).

Nếu bạn muốn trạng thái được quản lý được cập nhật tự động cùng với khả năng hiển thị, bạn có thể sử dụng một ràng buộc như @jewelsea đã chỉ ra: node.managedProperty().bind(node.visibleProperty());


49
Một ràng buộc cũng trình , ví dụ như,node.managedProperty().bind(node.visibleProperty());
jewelsea

Điều đó thật tuyệt! Đến từ Adobe / Apache Flex, tôi thực sự thiếu nút chuyển đổi includeInlayout (thực hiện điều tương tự ở đây). Flex vẫn có cái tên trực quan hơn nhưng thật tuyệt là chúng ta có thể dễ dàng thực hiện điều này.
Người dùng

1
Đã loại bỏ các yếu tố vô hình từ cha mẹ của họ quá lâu, điều này sẽ tiết kiệm rất nhiều thời gian trong tương lai.
hanslovsky

7

Vì nó vô hình, nó sẽ không di chuyển lên đầu. Bạn phải xóa nó bằng một số thứ như:

// remove
vbox.getChildren().remove(...)

Khi bạn đã xóa phần tử bạn muốn ẩn sau đó, phần tử khác sẽ chuyển lên đầu.


3
AFAIK, thao tác biểu đồ cảnh đắt hơn so với việc đặt hiển thị thành sai.
Puce

2

Thay vì ẩn vbox, bạn nên xóa nó khỏi phần Trẻ em và nếu bạn muốn hiển thị lại, hãy thêm vbox lần nữa.


1

Cố gắng sử dụng setVible và ManagedProperty cùng nhau. Đây là một ví dụ:

myHBox.setVisible(false);
myHBox.managedProperty().bind(myHBox.visibleProperty());

1
không có gì mới so với câu trả lời có nhiều phiếu tán thành nhất, có :)
kleopatra

0

Nếu tôi muốn ẩn và hiện một nút, tôi thay đổi kích thước của nút thành 0 nếu tôi muốn ẩn nó. Bằng cách đó, nút sẽ không chiếm không gian vì người dùng không nhìn thấy được, vì vậy khi tôi muốn nó hiển thị, tôi sẽ điều chỉnh lại kích thước để nó hiển thị.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.