8

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ファイルを介してスクロールバーを非表示にできるはずですか、それともそのトリックを実行するコードがありますか.

ありがとう。

4

3 に答える 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;
}
于 2013-11-11T07:57:33.307 に答える
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;
}

奇抜なコードは必要ありません。

于 2020-05-13T15:06:42.067 に答える
0

TextAreaSkin クラスのコードを観察したところ、コントロールで何かが発生するたびに、「シーングラフのレイアウト パス中に」事実上呼び出される void layoutChildren(x, y, w, h) メソッドが呼び出されることがわかりました。には、制御の現在の状態に応じて、hbarPolicy と vbarPolicy を AS_NEEDED と NEVER の間で変更するコードが含まれています。

そのため、css を使用して何かを行う機会はないようです。

スクロールバーを非表示にするだけにしてください。しかし、ScrollPaneSkinのコードを見ると、スクロールバーは一度作成されますが、コントロールが動作している間に可視状態が変化するようです.setVisible(false)(最も近いレイアウトでは無視されます)を使用する代わりに、使用してみてくださいsetOpacity(0.0)。(うまくいくかどうかはわかりませんが、試してみる価値があります)。

また、CSS を使用する代わりに、Parent.getChildrenUnmodifiable() メソッドを使用してコントロール構造内のスクロールバーの再帰的検索を適用し、それらを手動で非表示にすることができます。

于 2013-01-08T01:39:14.533 に答える