2014-05-10 17 views
5

Ich bin neu bei javafx also bitte tragen Sie mit mir. Also, was ich tun möchte, ist etwas wirklich einfaches, aber kann nicht herausfinden, wie man es richtig macht.So zentrieren Sie einen Knoten innerhalb eines Bereichs javafx

Ziel: Erstellen Sie einen Bereich, der 500 mal 500 ist. Ich möchte einen Knoten hinzufügen und in unserem Fall sagen wir eine Bildansicht, die ein Bild von 200 mal 200 enthält. Ich möchte die Bildansicht hinzufügen können zu der Scheibe und zentriere sie.

ImageView view = new ImageView(); 

    Image img = new Image("test.png"); 
    view.setImage(img); 
    Pane pane = new Pane(); 
    pane.setMinWidth(500); 
    pane.setMinWidth(500); 
    pane.getChildren().add(view); 

Jede Beratung Geschätzt, Danke, D

+0

Jeder Grund, warum Sie nicht 'StackPane',' HBox' oder 'VBox' verwenden können? Sie können ihre Ausrichtung einstellen, die ihre Kinder in beiden Dimensionen automatisch zentriert, wenn Sie 'Pos.CENTER' verwenden. –

+0

Die ganze Idee ist, dass ich ein Ankerfenster habe und ich möchte, dass der Benutzer jedes Layout (VBox, HBox oder Stackpane) hinzufügen kann. Die Größe des Ankerbereichs ändert sich jedoch und hat keine bevorzugte Größe. Wie würden Sie es dann mit dem von Ihnen verwendeten Layout zentrieren? – darewreck

+0

Die von Ihnen erwähnten Layoutoptionen lösen das Problem, wie ich oben erläutert habe. Ich bin verwirrt. Warum musst du eine 'AnchorPane' verwenden? –

Antwort

13

Sie haben 2 Möglichkeiten:

1) Zum Beispiel StackPane statt Pane verwenden (weil Sie Pos)

StackPane p = new StackPane(); 
p.setPrefSize(700,700); //set a default size for your stackpane 
Image img = new Image("test.png"); //create an image 
ImageView v = new ImageView(img); //create an imageView and pass the image 

p.getChildren().add(v); //add imageView to stackPane 
StackPane.setAlignment(v,Pos.CENTER_LEFT); //set it to the Center Left(by default it's on the center) 
stage.setScene(new Scene(p)); 
stage.show(); 
verwenden können

2) Sie können JavaFx Scene Builder verwenden, es ist ein visuelles Layout-Tool für JavaFx. Zum Beispiel, wenn ich will ein Hbox Layout erstellen:

<?import java.lang.*?> 
<?import java.net.*?> 
<?import java.util.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.effect.*?> 
<?import javafx.scene.image.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.shape.*?> 
<?import javafx.scene.text.*?> 

<HBox alignment="CENTER" prefHeight="369.0" prefWidth="425.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" > 
    <children> 
     <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" x="0.0" HBox.hgrow="NEVER"> 
      <image> 
       <Image url="@../yourImg.png" /> 
      </image> 
     </ImageView> 
    </children> 
</HBox> 

speichern-it als myLayout.fxml in Ihrer Hauptklasse und fügen Sie folgenden Code:

Hbox root = FXMLLoader.load(getClass().getResource("myLayout.fxml")); 
Scene scene = new Scene(root); 
stage.setScene(scene); 
stage.show(); 
+1

Danke. Was passiert, wenn es sich um einen AnkerPane ohne bevorzugte Größe handelt? Ich habe versucht, einfach den StackPane zum Anchor Pane hinzuzufügen. Ohne die angegebene Größe funktioniert die Zentrierung jedoch nicht. In meinem Beispiel kann der Ankerbereich in der Größe geändert werden, da links, rechts, oben und unten Register sind, die geöffnet werden können und die Größe des mittleren Ankerbereichs ändern können. – darewreck

2

ich in der Regel verwenden Sie die folgende Vorgehensweise um einen Knoten/Bereich zu zentrieren:

<VBox alignment="CENTER"> 
    <HBox alignment="CENTER"> 
     <!-- your node/pane --> 
    </HBox> 
</VBox> 
Verwandte Themen