【问题标题】:Using a JavaFX TextArea, how to increase fontsize without increasing scrollbar size?使用 JavaFX TextArea,如何在不增加滚动条大小的情况下增加字体大小?
【发布时间】:2016-11-13 23:05:27
【问题描述】:

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

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

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?";

}

【问题讨论】:

    标签: javafx textarea scrollbar


    【解决方案1】:

    我不完全理解为什么会这样,但是如果您在 em 中设置字体大小,它可以在不影响滚动条大小的情况下工作:

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

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

    针对不同的屏幕 DPI 调整大小

    当屏幕 DPI 改变时,Windows 将使用不同的字体大小 默认。默认为 12 像素,可以更改为 15 像素或 18 像素,具体取决于 在用户偏好或屏幕 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...),所以这样做不会' t 影响滚动条的大小。

    【讨论】:

      猜你喜欢
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2013-04-03
      相关资源
      最近更新 更多