使用 css 在 TextArea 内设置文本对齐方式不起作用
Set text alignment inside the TextArea using css is not working
我正在尝试在控制器的中心、左侧和右侧的文本区域内设置文本对齐方式,但 none 有效。
我现在的代码很简单,对于中心方法我在方法里面使用这个:
textArea.setStyle("-fx-text-alignment: center");
但这并没有改变什么。
有没有更好的方法来解决这个问题?
I've read these ones before and they are different, one for labels and one for doing through external css file
实际上 "doing through external css file" 是推荐的方法。更清洁,更具可读性和更好的应用维护。
但如果出于某些未知原因(如您未提及的原因),您只想通过代码来完成,您可以。这是一个小的 MCVE,它告诉你如何。
public class TextAlign extends Application {
private TextArea textArea;
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane root = new BorderPane();
// The toggle button for alignment
HBox hbToggleContainer = new HBox(10.0);
ToggleButton tbAlignLeft = new ToggleButton("Align to left");
ToggleButton tbAlignCenter = new ToggleButton("Align to center");
ToggleButton tbAlignRight = new ToggleButton("Align to right");
ToggleGroup tg = new ToggleGroup();
tg.getToggles().addAll(tbAlignLeft, tbAlignCenter, tbAlignRight);
hbToggleContainer.getChildren().addAll(tbAlignLeft, tbAlignCenter, tbAlignRight);
hbToggleContainer.setAlignment(Pos.CENTER);
root.setTop(hbToggleContainer);
textArea = new TextArea("Hello world. Lorem ipsum blah blah\n\nMerry Christmas.");
root.setCenter(textArea);
tbAlignLeft.selectedProperty().addListener((obs, oldValue, newValue)-> {
Node lText = textArea.lookup(".text");
lText.setStyle("-fx-text-alignment: left;");
});
tbAlignCenter.selectedProperty().addListener((obs, oldValue, newValue)-> {
Node lText = textArea.lookup(".text");
lText.setStyle("-fx-text-alignment: center;");
});
tbAlignRight.selectedProperty().addListener((obs, oldValue, newValue)-> {
Node lText = textArea.lookup(".text");
lText.setStyle("-fx-text-alignment: right;");
});
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String... args) {
Application.launch(args);
}
}
这里的重点是 lookup
方法,它使您能够检索理解 -fx-text-alignment
属性 的组件。
在我看来,这个解决方案显然不如 干净。 (我在评论中链接的那个)
我正在尝试在控制器的中心、左侧和右侧的文本区域内设置文本对齐方式,但 none 有效。
我现在的代码很简单,对于中心方法我在方法里面使用这个:
textArea.setStyle("-fx-text-alignment: center");
但这并没有改变什么。
有没有更好的方法来解决这个问题?
I've read these ones before and they are different, one for labels and one for doing through external css file
实际上 "doing through external css file" 是推荐的方法。更清洁,更具可读性和更好的应用维护。
但如果出于某些未知原因(如您未提及的原因),您只想通过代码来完成,您可以。这是一个小的 MCVE,它告诉你如何。
public class TextAlign extends Application {
private TextArea textArea;
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane root = new BorderPane();
// The toggle button for alignment
HBox hbToggleContainer = new HBox(10.0);
ToggleButton tbAlignLeft = new ToggleButton("Align to left");
ToggleButton tbAlignCenter = new ToggleButton("Align to center");
ToggleButton tbAlignRight = new ToggleButton("Align to right");
ToggleGroup tg = new ToggleGroup();
tg.getToggles().addAll(tbAlignLeft, tbAlignCenter, tbAlignRight);
hbToggleContainer.getChildren().addAll(tbAlignLeft, tbAlignCenter, tbAlignRight);
hbToggleContainer.setAlignment(Pos.CENTER);
root.setTop(hbToggleContainer);
textArea = new TextArea("Hello world. Lorem ipsum blah blah\n\nMerry Christmas.");
root.setCenter(textArea);
tbAlignLeft.selectedProperty().addListener((obs, oldValue, newValue)-> {
Node lText = textArea.lookup(".text");
lText.setStyle("-fx-text-alignment: left;");
});
tbAlignCenter.selectedProperty().addListener((obs, oldValue, newValue)-> {
Node lText = textArea.lookup(".text");
lText.setStyle("-fx-text-alignment: center;");
});
tbAlignRight.selectedProperty().addListener((obs, oldValue, newValue)-> {
Node lText = textArea.lookup(".text");
lText.setStyle("-fx-text-alignment: right;");
});
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String... args) {
Application.launch(args);
}
}
这里的重点是 lookup
方法,它使您能够检索理解 -fx-text-alignment
属性 的组件。
在我看来,这个解决方案显然不如