2015-04-17 22 views
8

Ich habe an einer Software mit JavaFX gearbeitet und ich habe ein dummes aber besorgniserregendes Problem.JavaFX HBox Ausrichtung

In bestimmten Teil des Codes habe ich ein HBox, und, in der es drei Elemente: eine image, ein label und VBox.

Das Problem ist, dass ich die image nach links ausgerichtet haben möchte, das heißt, neben dem linken Rand des window und die VBox nach rechts ausgerichtet, das heißt, neben dem rechten Rand der window und ich weiß nicht, wie es geht.

Ich habe versucht, VBox.setAlignment(Pos.RIGHT_CENTER) zu verwenden, aber es hat nicht funktioniert.

+0

Bitte zeigen Sie uns Ihre versuchten Code. – Constant

+0

Intuition würde sagen, dass die HBox sie einfach in der Reihenfolge anordnet, in der Sie sie über 'hbox.getChildren() hinzufügen. Addall (arg0, arg1, ... argk);' – Waterbagel

Antwort

4

Ich denke, dass die beste Option von HBox zu BorderPane wechseln könnte. Es lässt Sie Gegenstände an jeden Rand Ihres Fensters kleben.
Eine andere Option ist GridPane. Sie können eine Spalte auswählen und ihre Eigenschaft 'Halgension' auf 'RECHTS' ändern.

Und übrigens, ich empfehle die Verwendung JavaFX Scene Builder während Spaß mit JavaFX.

20

Dies ist ein häufig auftretendes Ausrichtungsproblem, wenn Sie ein Element in die zwei Ecken des Layouts platzieren möchten.

Lassen Sie uns sagen, Sie haben wollen:

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

ich sehr einfache Lösung ist, zwei zusätzliche Regions zu verwenden. One in zwischen ImageView & Label. Der andere zwischen Label und VBox.

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

Diese Regionen müssen HGrow Satz als Priority.Always, haben, so dass, wenn Sie die HBox Größe ändern, werden diese zwei wachsen, die anderen Elemente intakt in ihrer Position zu halten.

FXML Beispiel:

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

Bitte beachten Sie die HBox.hgrow="ALWAYS" in beiden Regionen.

Ausgabe

enter image description here

+0

Danke! Hatte ein ähnliches Problem mit '' mit einem ImageView. Meine Steuerelemente sprangen zwischen Bildänderungen auf und ab, wobei '' mein Problem löste. :) – Robula

+1

Danke. Ich verwendete die gleiche Logik wie: 'Region Filler = neue Region(); HBox.setHgrow (Füller, Priorität.ALWAYS); 'dann' hbox.getChildren(). AddAll (links, Füller, rechts); ' – Satyendra