JavaFX TextArea隐藏滚动条

时间:2013-01-08 00:57:00

标签: javafx-2

我有一个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;
    }

正如预期的那样,文本区域字体/颜色/大小工作得很好。但是,滚动窗格策略似乎不起作用。

我是否可以通过CSS文件隐藏滚动条,或者是否有一些代码可以解决问题。

感谢。

3 个答案:

答案 0 :(得分:16)

来自How can I hide the scroll bar in 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 :(得分:1)

我只是使用 StyleSheet 非常简单地完成了此操作

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;
}

不需要所有古怪的代码。

答案 2 :(得分:0)

我观察了TextAreaSkin类的代码,并发现了一个 void layoutChildren(x,y,w,h)方法,在场景图的布局传递期间称为“事件”,事实上,每当控件发生某事时,都包含一个代码,该代码在AS_NEEDED之间更改hbarPolicy和vbarPolicy根据目前的控制状况,从来没有。

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

尝试让滚动条不可见。但是,当我看到ScrollPaneSkin的代码时,scrollBars被创建一次,但是它们的可见性状态似乎在控件工作期间发生了变化,因此,不使用setVisible(false)(在最近的布局中将被忽略),尝试使用setOpacity(0.0)。 (我不确定,它会起作用,但值得尝试)。

此外,您可以使用Parent.getChildrenUnmodifiable()方法在控件结构中应用scrollBars的递归搜索,而不是使用CSS,并使它们手动不可见。