Установить выравнивание текста внутри TextArea с помощью css не работает - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь установить выравнивание текста внутри textArea для центра, слева и справа в контроллерах, но ни один не работает.Мой текущий код прост, для метода center я использую это внутри метода:textArea.setStyle("-fx-text-alignment: center");Но это ничего не меняет.Есть ли лучший способ решить эту проблему?

1 Ответ

0 голосов
/ 27 декабря 2018

Я уже читал эти и раньше, и они разные, один для меток и один для внешнего файла CSS

На самом деле "делать через внешний файл CSS" рекомендуетсясделать это.Более чистое, удобочитаемое и лучшее аппликационное обслуживание.

Но если по каким-то неизвестным причинам (как вы их не упомянули), вы хотите сделать это только по коду, вы можете.Вот маленький 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.

На мой взгляд, это решение явно менее чисто, чем этот ответ .(тот, который я связал в комментарии)

...