使用JavaFX TextArea,如何在不增加滚动条大小的情况下增加fontsize?

时间:2016-11-13 23:05:28

标签: javafx textarea scrollbar

如何在不增加滚动条大小的情况下增加JavaFX TextArea中的fontsize?

以下示例显示了一个巨大的滚动条。我希望它保持正常的滚动条大小

public class TextAreaProblem extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        TextArea textArea = new TextArea(text);
        textArea.setWrapText(true);

        textArea.setStyle("-fx-font-size: 50");

        Scene scene = new Scene(textArea, 400, 400);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

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



    String text = "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?";

}

1 个答案:

答案 0 :(得分:2)

我没有完全理解为什么会这样,但如果你在em设置字体大小,它的工作原理不会影响滚动条的大小:

textArea.setStyle("-fx-font-size: 4em;");

对于(部分)解释,默认样式表modena.css具有以下注释:

  

调整不同的屏幕DPI

     

当屏幕DPI改变时,Windows将使用不同的字体大小   默认。默认值为12px,可以更改为15px或18px   在用户首选项或屏幕DPI上。在Mac上默认为13px和   嵌入式将取决于硬件。使UI控件缩放和成为   我们所基于的每种字体大小的正确比例   填充(控制控件的大小)字体大小。这是   使用“em”的CSS测量单位完成,其中(1em =字体大小)。

通过在em中指定填充来控制滚动条的大小,例如默认样式表包含:

.scroll-bar:vertical > .increment-button > .increment-arrow {
    -fx-padding: 0.167em 0.333em 0.167em 0.333em; /* 2 4 2 4 */
    -fx-shape: "M7.071,1L8.5,1.002L4.5,4l-4-2.998L1.93,1L4.5,2.976L7.071,1z";
    -fx-effect: dropshadow(two-pass-box , -fx-shadow-highlight-color, 1, 0.0 , 0, 1.4);
}

所以我认为正在发生的事情是,当您使用

指定文本区域的字体大小(以像素为单位)时
textArea.setStyle("-fx-font-size: 50");

您将文本区域的1em的定义更改为1em=50px,使滚动条按钮的填充高约17像素,宽33像素。我的猜测是,在em中指定字体大小只是缩放字体的大小,但不会更改em的定义(您很难定义1em=4em ...),所以这样做不会影响滚动条的大小。

相关问题