【问题标题】:Align content of a TextArea in JavaFX在 JavaFX 中对齐 TextArea 的内容
【发布时间】:2016-10-31 11:32:31
【问题描述】:

我正在制作一个用于培训目的的简单文本编辑器。我想创建一个按钮,它将我的文本输入从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();
}

这就是控制器的方法。

【问题讨论】:

  • 你在使用scenebuilder吗
  • 我正在使用 NetBeans
  • Netbeans 是 ide ,但我想知道您是否使用 scenebuiler 来设置 fx 应用程序的样式,我给出了答案,请检查它是否有帮助
  • 我不知道该把你的答案放在哪里。

标签: java javafx


【解决方案1】:

需要在文本区域的文本节点上设置-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);
    }
}

【讨论】:

    【解决方案2】:
    #text-area *.text { -fx-text-alignment: center; }
    

    在您的项目文件夹中创建一个 style.css 文件,然后将以下行添加到 java 代码中。

    scene.getStylesheets().addAll(this.getClass().getResource("style.css").toExternalForm()); primaryStage.setScene(scene);
    

    【讨论】:

    • 更新了答案,但你应该在你的问题中问过这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多