JavaFX ScrollPane border and background

后端 未结 7 2162
独厮守ぢ
独厮守ぢ 2020-12-14 10:56

I\'m having some problem regarding the default background and border of the ScrollPane. Using this style made the problem clearer to see.

setStyle(\"-fx-back         


        
相关标签:
7条回答
  • 2020-12-14 11:28

    Rather than use FXML or CSS I prefer to consume the event, but this only works on the portion that has content. If your scrollPane is larger than its content you also have to fill the remaining space.

    scrollPane.getContent().setOnMousePressed(Event::consume);
    scrollPane.setFitToHeight(true);
    scrollPane.setFitToWidth(true);
    
    0 讨论(0)
  • 2020-12-14 11:34

    Try use this first

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

    Before setting the background color

    0 讨论(0)
  • 2020-12-14 11:38

    There seems to be a simple solution, which is to use "-fx-background: rgb(80,80,80);", that is,

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

    At least this works perfectly for me, while "-fx-background-color: rgb(80,80,80);" or "-fx-control-inner-background: rgb(80,80,80);" do not work in javafx 8. "-fx-background-color: rgb(80,80,80);" did work in earlier versions of javafx.

    0 讨论(0)
  • 2020-12-14 11:40

    I have found a solution and would liked to post it here so others won't need to waste their time find it again.

    By looking at the default css of JavaFx (caspian.css) which has been extracted from the library using this command.

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

    I could see that the one I missed is

    -fx-padding: 0;
    

    So this is the css class I'm using.

    .scroll-pane {
        -fx-background-insets: 0;
        -fx-padding: 0;
    }
    
    .scroll-pane:focused {
        -fx-background-insets: 0;
    }
    
    .scroll-pane .corner {
        -fx-background-insets: 0;
    }
    
    0 讨论(0)
  • 2020-12-14 11:46

    You can use:

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

    If you set only -fx-background-color, you will see the color change is applied to only the ScrollPane's inner edges, and the color of the center area is still not changed.

    The -fx-control-inner-background property will change the color of that center area.

    0 讨论(0)
  • 2020-12-14 11:47

    In the current version of JavaFX 8, you can use the edge-to-edge style class to remove the border entirely:

    <ScrollPane styleClass="edge-to-edge"/>
    
    0 讨论(0)
提交回复
热议问题