2013-08-21 62 views
20

Tôi có một bộ sưu tập của các nút:Thêm khoảng cách giữa các nút trong VBox

VBox menuButtons = new VBox(); 
menuButtons.getChildren().addAll(addButton, editButton, exitButton); 

Tôi muốn thêm một số khoảng cách giữa các nút này, mà không sử dụng một tấm CSS. Tôi nghĩ rằng nên có một cách cho việc này.

setPadding(); dành cho các Nút trong Hộp. setMargin(); nên cho Box chính nó. Nhưng tôi không tìm được cách để khoảng cách giữa các nút.

Tôi rất vui vì bất kỳ ý tưởng nào. :)

+4

MenuButton là gì? – jewelsea

+0

Điều này có hữu ích không? http://stackoverflow.com/questions/2561305/how-can-i-set-distance-between-elements-ordically-vertically – Andy

+0

@jewelsea: đã sửa nó!Sry – codepleb

Trả lời

39

VBox hỗ trợ khoảng cách:

VBox menuButtons = new VBox(5); 

hoặc

menuButtons.setSpacing(5); 
+1

Thx ...: $ Tôi nghĩ đây sẽ là số phần tử trong đó. Nerver đã nghĩ rằng điều này rất đơn giản. – codepleb

+4

Btw: Trong FXML, nó trông giống như sau: ' ...' – codepleb

15

Chỉ cần gọi setSpacing phương pháp và thông qua một số giá trị. Ví dụ với HBox (nó tương tự cho VBox):

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.HBoxBuilder; 
import javafx.stage.Stage; 

public class SpacingDemo extends Application { 
    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) { 
     stage.setTitle("Spacing demo"); 

     Button btnSave = new Button("Save"); 
     Button btnDelete = new Button("Delete"); 
     HBox hBox = HBoxBuilder.create() 
       .spacing(30.0) //In case you are using HBoxBuilder 
       .padding(new Insets(5, 5, 5, 5)) 
       .children(btnSave, btnDelete) 
       .build(); 

     hBox.setSpacing(30.0); //In your case 

     stage.setScene(new Scene(hBox, 320, 240)); 
     stage.show(); 
    } 
} 

Và đây là cách có vẻ:

Nếu không có các khoảng cách:

enter image description here

Với khoảng cách:

enter image description here

+0

Câu trả lời hay! Big Thx! :) Tôi đã chọn điều này, nếu Sergey Grinev không đưa ra một giải pháp mà tôi có thể đặt trực tiếp trong hàm tạo. – codepleb

+0

Không sao cả. Không có chi. :) –

+2

Builder được khấu hao trong javafx 8, bạn nên sử dụng cách tiêu chuẩn để tạo đối tượng và đặt khoảng trắng của nó. xem [bài đăng này trên diễn đàn oracle] (https://forums.oracle.com/thread/2544323) –

4

Nếu bạn đang sử dụng FXML, sử dụng spacing thuộc tính:

<VBox spacing="5" /> 
4

Như những người khác đã đề cập, bạn có thể sử dụng setSpacing().

Tuy nhiên, bạn cũng có thể sử dụng setMargin(), nó không dành cho ngăn (hoặc hộp trong lời nói của bạn), nó dành cho từng cá nhân Node s. Phương pháp setPadding() dành cho chính ngăn. Trong thực tế, setMargin() lấy một nút làm thông số để bạn có thể đoán nó là gì.

Ví dụ:

HBox pane = new HBox(); 
Button buttonOK = new Button("OK"); 
Button buttonCancel = new Button("Cancel"); 
/************************************************/ 
pane.setMargin(buttonOK, new Insets(0, 10, 0, 0)); //This is where you should be looking at. 
/************************************************/ 
pane.setPadding(new Insets(25)); 
pane.getChildren().addAll(buttonOK, buttonCancel); 
Scene scene = new Scene(pane); 
primaryStage.setTitle("Stage Title"); 
primaryStage.setScene(scene); 
primaryStage.show(); 

Bạn có thể nhận được kết quả tương tự nếu bạn thay thế dòng đó với

pane.setSpacing(10); 

Nếu bạn có một vài nút đó nên được đặt cách nhau, setSpacing() phương pháp là xa thuận tiện hơn vì bạn cần gọi số setMargin() cho từng nút riêng lẻ và điều đó thật vô lý. Tuy nhiên, setMargin() là những gì bạn cần nếu bạn cần lề (duh) xung quanh một nút mà bạn có thể xác định xem mỗi bên là bao nhiêu bởi vì setSpacing() phương thức đặt dấu cách chỉ ở giữa các nút, chứ không phải giữa nút và các cạnh của cửa sổ .

+0

Bài tốt nhưng tôi nghĩ rằng nó là một chút sạch hơn để làm 'HBox.setMargin (Node, Insets)' chứ không phải là 'pane.setMargin (Node, Insets)' vì 'setMargin' là một hàm tĩnh. Tôi không biết nếu một trong hai cách tạo ra một sự khác biệt thực tế. – Max

Các vấn đề liên quan