2015-04-17 14 views
8

Tôi đã làm việc trên một phần mềm bằng cách sử dụng JavaFX và tôi có một vấn đề ngu ngốc nhưng đáng lo ngại.JavaFX HBox Alignment

Trong phần nhất định của mã, tôi có HBox và bên trong ba mục: image, labelVBox.

Vấn đề là tôi muốn có các liên kết image ở bên trái, có nghĩa là, bên cạnh lề trái của window và liên kết ở bên phải, bên cạnh đường viền bên phải của window và tôi không biết cách thực hiện.

Tôi đã cố gắng sử dụng VBox.setAlignment(Pos.RIGHT_CENTER), nhưng nó không hoạt động.

+0

Xin chỉ cho chúng tôi mã cố gắng của bạn. – Constant

+0

Trực giác sẽ nói rằng HBox chỉ đơn giản là ra lệnh cho chúng theo thứ tự bạn thêm chúng vào HBox thông qua 'hbox.getChildren(). Addall (arg0, arg1, ... argk);' – Waterbagel

Trả lời

4

Tôi nghĩ rằng tùy chọn tốt nhất có thể chuyển từ HBox sang BorderPane. Nó cho phép bạn tạo các vật phẩm dính vào bất kỳ cạnh nào của cửa sổ của bạn.
Một tùy chọn khác là GridPane. Bạn có thể chọn cột và thay đổi thuộc tính 'Halignment' thành 'RIGHT'.

Và, nhân tiện, tôi khuyên bạn nên sử dụng JavaFX Scene Builder trong khi vui chơi với JavaFX.

20

Đây là vấn đề liên kết phổ biến nhất khi bạn muốn đặt một mục về phía hai góc của bố cục.

Chúng ta hãy nói rằng bạn muốn có:

HBox 
    | 
    ImageView (Left) 
    Label (Center) 
    VBox (Right) 

Tôi giải pháp rất đơn giản là sử dụng thêm hai Regions. Một ở giữa ImageView & Nhãn. Cái còn lại nằm giữa Label và VBox.

HBox 
    | 
    ImageView (Left) 
    Region 
    Label (Center) 
    Region 
    VBox (Right) 

Những vùng phải có HGrow bộ như Priority.Always, do đó nếu bạn thay đổi kích thước HBox, hai sẽ phát triển, giữ cho các yếu tố khác còn nguyên vẹn ở vị trí của họ.

FXML dụ:

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Label?> 
<?import javafx.scene.image.Image?> 
<?import javafx.scene.image.ImageView?> 
<?import javafx.scene.layout.*?> 

<HBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="94.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <ImageView fitHeight="150.0" fitWidth="140.0" pickOnBounds="true" preserveRatio="true"> 
     <image> 
      <Image url="http://www.imaginaformacion.com/wp-content/uploads/2010/06/JavaFx.png" /> 
     </image> 
     </ImageView> 
     <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" /> 
     <Label prefHeight="17.0" prefWidth="205.0" text="Label On the Center" /> 
     <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" /> 
     <VBox alignment="CENTER_RIGHT" prefHeight="94.0" prefWidth="200.0"> 
     <children> 
      <Label prefHeight="17.0" prefWidth="200.0" text="Label Inside the VBox" /> 
     </children> 
     </VBox> 
    </children> 
</HBox> 

Xin lưu ý HBox.hgrow="ALWAYS" ở cả khu vực.

Output

enter image description here

+0

Cảm ơn bạn! Đã xảy ra sự cố tương tự khi sử dụng '' chứa một ImageView. Điều khiển của tôi đã nhảy lên và xuống giữa các thay đổi hình ảnh, bằng cách sử dụng '' giải quyết được vấn đề của tôi. :) – Robula

+1

Cảm ơn. Tôi đã sử dụng cùng một logic, như: 'Region filler = new Region(); HBox.setHgrow (filler, Priority.ALWAYS); 'then' hbox.getChildren(). AddAll (trái, phụ, phải); ' – Satyendra

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