2015-04-17 9 views
8

Ho lavorato a un software utilizzando JavaFX e ho un problema stupido ma preoccupante.JavaFX HBox Alignment

In certa parte del codice che ho un HBox, e, all'interno di esso tre elementi: un image, un label e VBox.

Il problema è che mi piacerebbe avere il image allineati a sinistra, cioè, accanto al margine sinistro del window, e il VBox allineato a destra, cioè vicino al bordo destro della window e non so come farlo.

Ho provato a utilizzare VBox.setAlignment(Pos.RIGHT_CENTER), ma non ha funzionato.

+0

prego ci mostra il vostro codice tentato. – Constant

+0

L'intuizione direbbe che l'HBox li ordina semplicemente nell'ordine in cui li aggiungi all'HBox tramite 'hbox.getChildren(). Addall (arg0, arg1, ... argk);' – Waterbagel

risposta

4

Penso che l'opzione migliore potrebbe essere il passaggio da HBox a BorderPane. Ti consente di creare elementi attaccati a qualsiasi bordo della tua finestra.
Un'altra opzione è GridPane. È possibile selezionare una colonna e modificare la proprietà "Halignment" in "RIGHT".

E, a proposito, raccomando di usare JavaFX Scene Builder divertendosi con JavaFX.

20

Questo è un problema di allineamento più comune quando si desidera posizionare un oggetto verso i due angoli del Layout.

Diciamo che si desidera avere:

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

Mi soluzione molto semplice è quello di utilizzare due extra Regions. Una via di mezzo tra ImageView & Etichetta. L'altro tra Label e VBox.

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

queste regioni devono avere HGrow insieme come Priority.Always, in modo che se si ridimensiona il HBox, questi due crescerà, mantenendo gli altri elementi intatti nella loro posizione.

FXML esempio:

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

Si prega di notare la HBox.hgrow="ALWAYS" in entrambe le regioni.

uscita

enter image description here

+0

Grazie! Aveva un problema simile usando '' contenente un ImageView. I miei controlli saltavano su e giù tra le modifiche delle immagini, usando '' risolto il mio problema. :) – Robula

+1

Grazie. Ho usato la stessa logica, come: 'Regione filler = new Region(); HBox.setHgrow (filler, Priority.ALWAYS); 'then' hbox.getChildren(). AddAll (left, filler, right); ' – Satyendra