2016-05-31 199 views
1

我有一个JavaFX TextSceneGroup的JavaFX - 居中的文本在场景

Text waitingForKey 
Scene scene 
Group root 

我有一个字符串字符串waitingForKeyString这我正在为waitingForKey,我想有一个中心对齐。

的问题是,有时串有两句话,我不能准时,

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

OR

字符串waitingForKeyString = “按ENTER键\ n” + “开始游戏” ,messageString =“”;

THEN

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

所以我怎么会对准这中心?当我试图对齐第一个waitingForKeyString我摧毁了第二个`waitingForKeyString和vicecersa。

回答

2

您可以使用StackPane作为您的Scene的根,因为它有alignmentProperty

如果要在StackPane中单独对齐Nodes,您可以使用public static void setAlignment(Node child, Pos value)方法StackPane

实施例(一个文本中中心对准,另一个是在左上对齐)

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

感谢。但是,如果我想向TopLeft添加文本,我该怎么办?它将所有内容对齐到中心。我应该制作另一个StackPane,然后将它们合并到一起吗? –

+0

使用两个文本更新了您的示例,其中一个是对齐的CENTER,一个是顶部左侧。 – DVarga

+0

谢谢。它效果很好。 –

1

指定TextAlignment.CENTERText和使用布局等StackPane即“默认为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如果我想将文本移动到TopLeft?我应该创建另一个StackPane吗?或者我可以以某种方式移动每个孩子? –

+0

DVarga的[更新答案](http://stackoverflow.com/a/37541701/230513)正确地结合了我们的建议方法。 – trashgod