我正在编写一个简单的文本编辑器用于培训目的。我想创建一个按钮,将TextArea
的文本输入居中,就像在MS Word中一样。我在FXML中有我的按钮,但我不知道我应该为TextArea
对象使用什么方法,我尝试了setStyle()
或getChild()
但是都没有用。
<Button onAction="#toTheCenter" text="center"/>
这是我在FXML中的按钮
<center>
<TextArea fx:id="textArea"/>
</center>
多数民众赞成TextArea
@FXML
private void toTheCenter(ActionEvent event){
String text = textArea.getText();
}
那就是来自控制器的方法。
答案 0 :(得分:2)
您需要在文本区域的文本节点上设置-fx-text-alignment
property。
动态执行此操作的最佳方法是为文本区域定义自定义CSS伪类:
PseudoClass centered = PseudoClass.getPseudoClass("centered");
然后在你的外部CSS文件中你可以做
.text-area:centered .text {
-fx-text-alignment: center ;
}
然后你可以打电话
textArea.pseudoClassStateChanged(centered, true);
切换居中,
textArea.pseudoClassStateChanged(centered, false);
将其关闭。
这是一个SSCCE(将上面的CSS代码放在centering-text-area.css
中):
import javafx.application.Application;
import javafx.css.PseudoClass;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class TextAreaWithCentering extends Application {
@Override
public void start(Stage primaryStage) {
TextArea textArea = new TextArea();
PseudoClass centered = PseudoClass.getPseudoClass("centered");
ToggleButton center = new ToggleButton("Center");
center.selectedProperty().addListener((obs, wasCentered, isNowCentered) ->
textArea.pseudoClassStateChanged(centered, isNowCentered));
BorderPane.setAlignment(center, Pos.CENTER);
BorderPane.setMargin(center, new Insets(5));
BorderPane root = new BorderPane(textArea, null, null, center, null);
Scene scene = new Scene(root, 600, 600);
scene.getStylesheets().add("centering-text-area.css");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
答案 1 :(得分:1)
#text-area *.text { -fx-text-alignment: center; }
在项目文件夹中创建一个style.css文件,然后将以下行添加到java代码中。
scene.getStylesheets().addAll(this.getClass().getResource("style.css").toExternalForm()); primaryStage.setScene(scene);