Положение полос прокрутки Javafx - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть TextArea внутри ScrollPane.Я установил TextArea nodeOrientation = "RIGHT_TO_LEFT".Когда я делаю это, полосы прокрутки идут на левой стороне окна, а не на правой стороне, что я предполагаю по умолчанию.Как заставить полосы прокрутки с правой стороны окна?

Я пытался установить nodeOrientation моей AnchorPane и ScrollPane слева направо, но это не помогло

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="200.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.mycompany.mycalc.MyCalcHistoryController">
   <children>
      <ScrollPane fx:id="scrollPane" fitToHeight="true" fitToWidth="true" prefHeight="242.0" prefWidth="400.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <content>
            <TextArea fx:id="txtHistory" editable="false" nodeOrientation="RIGHT_TO_LEFT" />
         </content>
      </ScrollPane>
   </children>
</AnchorPane>

1 Ответ

0 голосов
/ 20 апреля 2019

Я использовал BorderPane вместо AnchorPane и не использовал fxml файл.Вот мой код и после кода снимок экрана.Как вы можете видеть, установка ориентации узла только для TextArea не меняет расположение полосы прокрутки на ScrollPane.

import javafx.application.Application;
import javafx.geometry.NodeOrientation;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class FxTest00 extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        TextArea txtAr = new TextArea("myxomatosis");
        txtAr.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);
        ScrollPane scrollPane = new ScrollPane(txtAr);
        scrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);
        BorderPane root = new BorderPane();
        root.setCenter(scrollPane);
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

FxTst00

РЕДАКТИРОВАТЬ (после первоначального комментария Ray_White к моему ответу)

Полоса прокрутки, на которую вы ссылаетесь (в своем комментарии), является частью TextArea и не связана с родительским элементом ScrollPane.В приведенном ниже коде TextArea добавляется непосредственно к BorderPane, т.е. приведенный ниже код не содержит ScrollPane.

. Как я обнаружил, для удаления вертикальной полосы прокрутки TextArea используется *Стиль 1024 *.Я создал файл CSS с именем scrolbar.css.Вот его содержание:

.text-area .scroll-pane {
    -fx-vbar-policy: never;
}

А вот модифицированный код, включая ваше предложение добавить текст к TextArea для принудительной прокрутки.

import javafx.application.Application;
import javafx.geometry.NodeOrientation;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class FxTest00 extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        TextArea txtAr = new TextArea("myxomatosis");
        txtAr.appendText("\n");
        txtAr.appendText("One");
        txtAr.appendText("\n");
        txtAr.appendText("Two");
        txtAr.appendText("\n");
        txtAr.appendText("Three");
        txtAr.appendText("\n");
        txtAr.appendText("Four");
        txtAr.appendText("\n");
        txtAr.appendText("Five");
        txtAr.appendText("\n");
        txtAr.appendText("Six");
        txtAr.appendText("\n");
        txtAr.appendText("Seven");
        txtAr.appendText("\n");
        txtAr.appendText("Eight");
        txtAr.appendText("\n");
        txtAr.appendText("Nine");
        txtAr.appendText("\n");
        txtAr.appendText("Ten");
        txtAr.appendText("\n");
        txtAr.appendText("Eleven");
        txtAr.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);
        BorderPane root = new BorderPane();
        root.setCenter(txtAr);
        Scene scene = new Scene(root);
        scene.getStylesheets().add(getClass().getResource("scrolbar.css").toString());
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

А вот экранзахват измененного графического интерфейса.Как видите, полоса прокрутки отсутствует.

No scrollbar

...