web-dev-qa-db-ja.com

JavaFXScrollPaneの境界線と背景

ScrollPaneのデフォルトの背景と境界線に関して問題があります。このスタイルを使用すると、問題がより明確になりました。

setStyle("-fx-background-color:blue; -fx-border-color:crimson;");

Image show the background and the border

私はこのスタイルを試しましたが、運が悪かったのは赤い境界線だけが消えて、青い境界線が残ったのです。

setStyle("-fx-background-color:blue; -fx-background-insets:0; -fx-border-color:crimson; -fx-border-width:0; -fx-border-insets:0;");

Image show the background and the border after my best work around

私はこの古い投稿を見てきました JavaFX Hide ScrollPane灰色の境界線 および http://docs.Oracle.com/javafx/2/ui_controls/editor.htm

このコード行も機能しません

scrollPane.getStyleClass().add("noborder-scroll-pane");

ありがとう

12

JavaFX 8の現在のバージョンでは、Edge-to-Edgeスタイルクラスを使用して、境界線を完全に削除できます。

<ScrollPane styleClass="Edge-to-Edge"/>
25
Mike Hearn

私は解決策を見つけたので、他の人がもう一度見つけるのに時間を無駄にする必要がないように、ここに投稿したいと思います。

このコマンドを使用してライブラリから抽出されたJavaFx(caspian.css)のデフォルトのcssを確認します。

jar xf jfxrt.jar com/Sun/javafx/scene/control/skin/caspian/caspian.css

私が逃したのは

-fx-padding: 0;

これが私が使用しているcssクラスです。

.scroll-pane {
    -fx-background-insets: 0;
    -fx-padding: 0;
}

.scroll-pane:focused {
    -fx-background-insets: 0;
}

.scroll-pane .corner {
    -fx-background-insets: 0;
}
17

最初にこれを使用してみてください

.scroll-pane > .viewport {
   -fx-background-color: transparent;
}

背景色を設定する前に

9
Howard J

「-fx-background:rgb(80,80,80);」を使用するという簡単な解決策があるようです。

scrollPane.setStyle("-fx-background: rgb(80,80,80);");

少なくともこれは私にとっては完璧に機能しますが、「-fx-background-color:rgb(80,80,80);」または「-fx-control-inner-background:rgb(80,80,80);」 javafx8では機能しません。 "-fx-background-color:rgb(80,80,80);"以前のバージョンのjavafxで機能しました。

8
user3477760

次を使用できます。

-fx-background-color: transparent;
-fx-control-inner-background: transparent;

-fx-background-colorのみを設定すると、色の変更がScrollPaneの内側のエッジにのみ適用され、中央領域の色は変更されないことがわかります。

-fx-control-inner-backgroundプロパティは、その中央領域の色を変更します。

2
RestInPeace

FXMLやCSSを使用するよりも、イベントを使用する方が好きですが、これはコンテンツがある部分でのみ機能します。 scrollPaneがそのコンテンツよりも大きい場合は、残りのスペースも埋める必要があります。

scrollPane.getContent().setOnMousePressed(Event::consume);
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
0
Jack J

正直なところ、あなたの質問は十分に明確ではありませんでしたが、私はできる限り他の人を助けるためにこの答えを提供しているだけです。

この問題の原因は、ScrollPaneがあり、その中にScrollPaneにバインドされているviewportと呼ばれるものがあることです。 ScrollPaneオブジェクトに適用するプロパティは、viewportには適用されません。子ではなく、両方[〜#〜] only [〜#〜]のプロパティを適用する場合は、-を使用する必要があります。 stylesheetプロパティであり、インラインcssコードを使用するstyleプロパティ自体ではありません。たとえば、ScrollPaneを透過的にしたい場合、ファイルの名前が「scrollPane.css」であると仮定して、両方にプロパティを適用する必要があります。

#mainScrollPane > .viewport {
    -fx-background-color: transparent;
}

#mainScrollPane {
    -fx-background-color: transparent;
}

ただし、ScrollPaneオブジェクトに特別なIdプロパティを適用する必要があるため、子には適用されません。

  ScrollPane scrollPane = new ScrollPane(root);
  scrollPane.setId("mainScrollPane");
  scrollPane.getStyleSheets().add("scrollPane.css");
0
Hasan Shadi