2016-05-31 24 views
1

Ich habe eine JavaFX Text, Scene und GroupJavaFX - zentriert Text in Szene

Text waitingForKey 
Scene scene 
Group root 

Ich habe einen String String waitingForKeyString, die ich hinzufüge zu waitingForKey und ich möchte ein Zentrum align haben.

Das Problem ist, dass manchmal die Zeichenfolge zwei Sätze haben, und ich kann es nicht

String waitingForKeyString= " Level 2 \n\n" + "Press ENTER to start a new game"; 

ODER

String waitingForKeyString = "ENTER drücken, um \ n" ausgerichtet + "um das Spiel zu starten" , messageString = "";

DANN

Scene scene = new Scene(root,SCREEN_WIDTH, SCREEN_HEIGHT, Color.BLACK); 
waitingForKey.setText(waitingForKeyString); 
root.getChildren().add(waitingForKey); 

Wie kann ich ausrichten, dies zu zentrieren? Als ich versuchte, zuerst waitingForKeyString auszurichten, zerstörte ich den zweiten `waitingForKeyString und vicecersa.

Antwort

2

Sie könnten eine StackPane als root Ihrer Scene verwenden, da es eine alignmentProperty hat.

Wenn Sie die Nodes in StackPane individuell ausrichten möchten, können Sie public static void setAlignment(Node child, Pos value) Methode von StackPane verwenden.

Beispiel

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     try { 
      StackPane root = new StackPane(); 
      Text text2 = new Text("I will be aligned TOPLEFT"); 
      Text text = new Text(" Level 2 \n\n" + "Press ENTER to start a new game"); 
      text.setTextAlignment(TextAlignment.CENTER); 
      root.getChildren().addAll(text2, text); 
      StackPane.setAlignment(text2, Pos.TOP_LEFT); 
      StackPane.setAlignment(text, Pos.CENTER); 


      Scene scene = new Scene(root, 400, 400); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

Dank. Aber was soll ich tun, wenn ich dem TopLeft auch einen Text hinzufügen möchte? Es richtet alles auf den Mittelpunkt aus. Soll ich ein weiteres StackPane machen und dann zusammenfügen? –

+0

Aktualisiert das Beispiel für Sie mit zwei Texten, einer ist ausgerichtet CENTER, einer ist TOP LINKS. – DVarga

+0

danke. Es funktioniert großartig. –

1

TextAlignment.CENTER für die Text angeben (ein Text in der Mitte ausgerichtet ist, ist ein anderes in der linken oberen ausgerichtet) und ein Layout wie StackPane dass verwenden "standardmäßig Pos.CENTER."

image

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane; 
import javafx.scene.paint.Color; 
import javafx.scene.text.Font; 
import javafx.scene.text.Text; 
import javafx.scene.text.TextAlignment; 
import javafx.stage.Stage; 
/** 
* @see http://stackoverflow.com/a/37541777/230513 
*/ 
public class Test extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Text waitingForKey = new Text("Level 2 \n\n" + "Press ENTER to start a new game"); 
     waitingForKey.setTextAlignment(TextAlignment.CENTER); 
     waitingForKey.setFont(new Font(18)); 
     waitingForKey.setFill(Color.ALICEBLUE); 
     StackPane root = new StackPane(); 
     root.getChildren().add(waitingForKey); 
     Scene scene = new Scene(root, 320, 240, Color.BLACK); 
     primaryStage.setTitle("Test"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

@ trashgod Und wenn ich einen Text nach TopLeft verschieben möchte? Soll ich ein anderes StackPane erstellen? Oder kann ich irgendwie jedes Kind bewegen? –

+0

DVarga's [aktualisierte Antwort] (http://stackoverflow.com/a/37541701/230513) kombiniert unsere vorgeschlagenen Ansätze richtig. – trashgod

Verwandte Themen