的JavaFX - 居中的文本在场景
我有一个JavaFX Text
,Scene
和Group
的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。
您可以使用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);
}
}
指定TextAlignment.CENTER
为Text
和使用布局等StackPane
即“默认为Pos.CENTER
”。
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://*.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);
}
}
@ trashgod如果我想将文本移动到TopLeft?我应该创建另一个StackPane吗?或者我可以以某种方式移动每个孩子? –
DVarga的[更新答案](http://*.com/a/37541701/230513)正确地结合了我们的建议方法。 – trashgod
感谢。但是,如果我想向TopLeft添加文本,我该怎么办?它将所有内容对齐到中心。我应该制作另一个StackPane,然后将它们合并到一起吗? –
使用两个文本更新了您的示例,其中一个是对齐的CENTER,一个是顶部左侧。 – DVarga
谢谢。它效果很好。 –