JavaFX TextArea隐藏滚动条。

问题描述 投票:7回答:3

我有一个TextArea(),想隐藏垂直-水平滚动条。 我看到该控件似乎有一个内置的滚动条,可以根据需要显示。

    TextArea numberPane = new TextArea();

    numberPane.setEditable(false);
    numberPane.setMaxWidth( 75 );

    // Set the characteristics of our line number pane
    numberPane.setId( "line-number-pane" );

在我的CSS文件中,我有以下设置。

    #line-number-pane
    {
        -fx-text-fill: white;
        -fx-background-color: black;
        -fx-font: 12px "Courier New";
        -fx-font-family: "Courier New";
        -fx-font-weight: bold;
    }

    #line-number-pane .scroll-pane
    {
        -fx-hbar-policy : never;
        -fx-vbar-policy : never;
    }

正如预期的那样,文本区域的fontcolorsize工作得很好。 然而,滚动窗格的设置似乎并不奏效。

我是否可以通过CSS文件来隐藏滚动条,或者有什么代码可以做到这一点。

谢谢,我有一个TextArea()。

javafx-2
3个回答
17
投票

如何隐藏TextArea中的滚动条?:

移除水平滚动条

textArea.setWrapText(true);

移除垂直滚动条

ScrollBar scrollBarv = (ScrollBar)ta.lookup(".scroll-bar:vertical");
scrollBarv.setDisable(true);

CSS

.text-area .scroll-bar:vertical:disabled {
    -fx-opacity: 0;
}

1
投票

我只是很简单地用一个 样式表。

样式表: CSS

.text-area .scroll-bar:vertical {
    -fx-pref-width: 1;
    -fx-opacity: 0;
}
.text-area .scroll-bar:horizontal {
    -fx-pref-height: 1;
    -fx-opacity: 0;
}

不需要那么多古怪的代码。


0
投票

我观察了TextAreaSkin类的代码,发现有一个void layoutChildren(x,y,w,h)方法,这个方法是在 "场景图的布局过程中 "被调用的,事实上,每次当一个控件发生什么事情的时候,这个方法都会包含一段代码,它根据控件的当前状态,在AS_NEEDED和NEVER之间改变hbarPolicy和vbarPolicy。

所以,看起来,没有机会用css来做一些事情。

试着让滚动条不可见。但是,我看到ScrollPaneSkin的代码,滚动条被创建了一次,但是在控件工作的过程中,它们的可见性状态似乎发生了变化,所以,与其使用setVisible(false)(在最近的布局中会被忽略),不如尝试使用setOpacity(0.0)。(我不确定它是否会工作,但值得一试)。

另外,你可以不使用CSS,而是在控件结构中应用递归搜索滚动条,使用Parent.getChildrenUnmodifiable()方法,手动使其不可见。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.