2015-04-17 7 views
8

Я работаю над программным обеспечением с использованием JavaFX, и у меня есть глупая, но тревожная проблема.JavaFX HBox Alignment

В некоторой части кода у меня есть HBox, и внутри него три элемента: image, а label и VBox.

Вопрос заключается в том, что я хотел бы иметь image выровнено влево, то есть рядом с левым краем window и VBox выравниваются по правому краю, то есть, рядом с правой границей window, и я не знаю, как это сделать.

Я пытался использовать VBox.setAlignment(Pos.RIGHT_CENTER), но это не сработало.

+0

Пожалуйста, покажите нам свою попытку код. – Constant

+0

Intuition скажет, что HBox просто заказывает их в том порядке, в котором вы добавляете их в HBox через 'hbox.getChildren(). Addall (arg0, arg1, ... argk);' – Waterbagel

ответ

4

Думаю, что лучший вариант может быть переключен с HBox на BorderPane. Это позволяет вам делать предметы, прикрепленные к любому краю вашего окна.
Другой вариант: GridPane. Вы можете выбрать столбец и изменить его свойство «Сглаживание» на «ПРАВО».

И, кстати, я рекомендую использовать JavaFX Scene Builder, развлекаясь с помощью JavaFX.

20

Это наиболее распространенная проблема выравнивания, когда вы хотите поместить элемент в два угла макета.

Допустим, вы хотите иметь:

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

Я очень простое решение заключается в использовании двух дополнительных Regions. Один между ImageView & Этикетка. Другое между Label и VBox.

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

Эти регионы должны иметь HGrow набор как Priority.Always, так что если вы измените размер HBox, эти два будут расти, сохраняя остальные элементы нетронутыми в их месте.

пример FXML:

<?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> 

Пожалуйста, обратите внимание HBox.hgrow="ALWAYS" в обоих регионах.

Выход

enter image description here

+0

Спасибо! Имел аналогичную проблему, используя '', содержащий ImageView. Мои элементы управления подпрыгивали между изменениями изображений, используя '' решил мою проблему. :) – Robula

+1

Спасибо. Я использовал ту же логику, что и: 'Region filler = new Region(); HBox.setHgrow (filler, Priority.ALWAYS); 'then' hbox.getChildren(). AddAll (left, filler, right);' – Satyendra

Смежные вопросы